aboutsummaryrefslogtreecommitdiffstats
path: root/repository
diff options
context:
space:
mode:
Diffstat (limited to 'repository')
-rw-r--r--repository/git.go20
-rw-r--r--repository/mock_repo.go2
-rw-r--r--repository/repo.go2
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