diff options
Diffstat (limited to 'repository')
-rw-r--r-- | repository/git.go | 20 | ||||
-rw-r--r-- | repository/mock_repo.go | 2 | ||||
-rw-r--r-- | repository/repo.go | 2 |
3 files changed, 18 insertions, 6 deletions
diff --git a/repository/git.go b/repository/git.go index 8c20d0b8..92c7bb63 100644 --- a/repository/git.go +++ b/repository/git.go @@ -7,6 +7,7 @@ import ( "fmt" "github.com/MichaelMure/git-bug/util" "io" + "os" "os/exec" "strings" ) @@ -58,6 +59,11 @@ func (repo *GitRepo) runGitCommand(args ...string) (string, error) { return repo.runGitCommandWithStdin(nil, args...) } +// Run the given git command using the same stdin, stdout, and stderr as the review tool. +func (repo *GitRepo) runGitCommandInline(args ...string) error { + return repo.runGitCommandWithIO(os.Stdin, os.Stdout, os.Stderr, args...) +} + // NewGitRepo determines if the given working directory is inside of a git repository, // and returns the corresponding GitRepo instance if it is. func NewGitRepo(path string) (*GitRepo, error) { @@ -99,9 +105,14 @@ func (repo *GitRepo) GetCoreEditor() (string, error) { } // PullRefs pull git refs from a remote -func (repo *GitRepo) PullRefs(remote string, refPattern string) error { - fetchRefSpec := fmt.Sprintf("+%s:%s", refPattern, refPattern) - _, err := repo.runGitCommand("fetch", remote, fetchRefSpec) +func (repo *GitRepo) PullRefs(remote, refPattern, remoteRefPattern string) error { + remoteRefSpec := fmt.Sprintf(remoteRefPattern, remote) + fetchRefSpec := fmt.Sprintf("%s:%s", refPattern, remoteRefSpec) + err := repo.runGitCommandInline("fetch", remote, fetchRefSpec) + + if err != nil { + return fmt.Errorf("failed to pull from the remote '%s': %v", remote, err) + } // TODO: merge new data @@ -112,7 +123,8 @@ func (repo *GitRepo) PullRefs(remote string, refPattern string) error { func (repo *GitRepo) PushRefs(remote string, refPattern string) error { // The push is liable to fail if the user forgot to do a pull first, so // we treat errors as user errors rather than fatal errors. - _, err := repo.runGitCommand("push", remote, refPattern) + err := repo.runGitCommandInline("push", remote, refPattern) + if err != nil { return fmt.Errorf("failed to push to the remote '%s': %v", remote, err) } diff --git a/repository/mock_repo.go b/repository/mock_repo.go index e747eb24..f9b070b4 100644 --- a/repository/mock_repo.go +++ b/repository/mock_repo.go @@ -35,7 +35,7 @@ func (r *mockRepoForTest) PushRefs(remote string, refPattern string) error { return nil } -func (r *mockRepoForTest) PullRefs(remote string, refPattern string) error { +func (r *mockRepoForTest) PullRefs(remote string, refPattern string, remoteRefPattern string) error { return nil } diff --git a/repository/repo.go b/repository/repo.go index 3a30128f..a58f35d9 100644 --- a/repository/repo.go +++ b/repository/repo.go @@ -18,7 +18,7 @@ type Repo interface { GetCoreEditor() (string, error) // PullRefs pull git refs from a remote - PullRefs(remote string, refPattern string) error + PullRefs(remote string, refPattern string, remoteRefPattern string) error // PushRefs push git refs to a remote PushRefs(remote string, refPattern string) error |