summaryrefslogtreecommitdiffstats
path: root/pkg/integration
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2023-02-22 22:25:18 +1100
committerJesse Duffield <jessedduffield@gmail.com>2023-02-22 22:29:01 +1100
commit1034962c7edad578427d056b7421c9195c29a457 (patch)
treec901a2309df784d3cdbe4d337c8b03acf61e20d2 /pkg/integration
parenteabe7f462a1f950d05b66306c19a00855e3fa175 (diff)
migrate more tests
Diffstat (limited to 'pkg/integration')
-rw-r--r--pkg/integration/components/actions.go14
-rw-r--r--pkg/integration/tests/branch/rebase.go10
-rw-r--r--pkg/integration/tests/branch/rebase_and_drop.go10
-rw-r--r--pkg/integration/tests/cherry_pick/cherry_pick_conflicts.go10
-rw-r--r--pkg/integration/tests/file/discard_changes.go5
-rw-r--r--pkg/integration/tests/interactive_rebase/swap_in_rebase_with_conflict.go22
-rw-r--r--pkg/integration/tests/sync/pull_merge.go53
-rw-r--r--pkg/integration/tests/sync/pull_merge_conflict.go84
-rw-r--r--pkg/integration/tests/sync/pull_rebase.go52
-rw-r--r--pkg/integration/tests/sync/pull_rebase_conflict.go83
-rw-r--r--pkg/integration/tests/sync/pull_rebase_interactive_conflict.go95
-rw-r--r--pkg/integration/tests/sync/pull_rebase_interactive_conflict_drop.go101
-rw-r--r--pkg/integration/tests/tests_gen.go6
13 files changed, 499 insertions, 46 deletions
diff --git a/pkg/integration/components/actions.go b/pkg/integration/components/actions.go
index fb4114890..c599f3697 100644
--- a/pkg/integration/components/actions.go
+++ b/pkg/integration/components/actions.go
@@ -17,3 +17,17 @@ func (self *Actions) ContinueMerge() {
func (self *Actions) ContinueRebase() {
self.ContinueMerge()
}
+
+func (self *Actions) AcknowledgeConflicts() {
+ self.t.ExpectPopup().Confirmation().
+ Title(Equals("Auto-merge failed")).
+ Content(Contains("Conflicts!")).
+ Confirm()
+}
+
+func (self *Actions) ContinueOnConflictsResolved() {
+ self.t.ExpectPopup().Confirmation().
+ Title(Equals("continue")).
+ Content(Contains("all merge conflicts resolved. Continue?")).
+ Confirm()
+}
diff --git a/pkg/integration/tests/branch/rebase.go b/pkg/integration/tests/branch/rebase.go
index e59aa8cb2..211dca839 100644
--- a/pkg/integration/tests/branch/rebase.go
+++ b/pkg/integration/tests/branch/rebase.go
@@ -35,10 +35,7 @@ var Rebase = NewIntegrationTest(NewIntegrationTestArgs{
Content(Contains("Are you sure you want to rebase 'first-change-branch' on top of 'second-change-branch'?")).
Confirm()
- t.ExpectPopup().Confirmation().
- Title(Equals("Auto-merge failed")).
- Content(Contains("Conflicts!")).
- Confirm()
+ t.Actions().AcknowledgeConflicts()
t.Views().Files().
IsFocused().
@@ -51,10 +48,7 @@ var Rebase = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Information().Content(Contains("rebasing"))
- t.ExpectPopup().Confirmation().
- Title(Equals("continue")).
- Content(Contains("all merge conflicts resolved. Continue?")).
- Confirm()
+ t.Actions().ContinueOnConflictsResolved()
t.Views().Information().Content(DoesNotContain("rebasing"))
diff --git a/pkg/integration/tests/branch/rebase_and_drop.go b/pkg/integration/tests/branch/rebase_and_drop.go
index 5f5341d66..04c2246ab 100644
--- a/pkg/integration/tests/branch/rebase_and_drop.go
+++ b/pkg/integration/tests/branch/rebase_and_drop.go
@@ -43,10 +43,7 @@ var RebaseAndDrop = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Information().Content(Contains("rebasing"))
- t.ExpectPopup().Confirmation().
- Title(Equals("Auto-merge failed")).
- Content(Contains("Conflicts!")).
- Confirm()
+ t.Actions().AcknowledgeConflicts()
t.Views().Files().IsFocused().
SelectedLine(MatchesRegexp("UU.*file"))
@@ -78,10 +75,7 @@ var RebaseAndDrop = NewIntegrationTest(NewIntegrationTestArgs{
IsFocused().
PressPrimaryAction()
- t.ExpectPopup().Confirmation().
- Title(Equals("continue")).
- Content(Contains("all merge conflicts resolved. Continue?")).
- Confirm()
+ t.Actions().ContinueOnConflictsResolved()
t.Views().Information().Content(DoesNotContain("rebasing"))
diff --git a/pkg/integration/tests/cherry_pick/cherry_pick_conflicts.go b/pkg/integration/tests/cherry_pick/cherry_pick_conflicts.go
index eaf9862d6..3e82de065 100644
--- a/pkg/integration/tests/cherry_pick/cherry_pick_conflicts.go
+++ b/pkg/integration/tests/cherry_pick/cherry_pick_conflicts.go
@@ -52,10 +52,7 @@ var CherryPickConflicts = NewIntegrationTest(NewIntegrationTestArgs{
Content(Contains("Are you sure you want to cherry-pick the copied commits onto this branch?")).
Confirm()
- t.ExpectPopup().Confirmation().
- Title(Equals("Auto-merge failed")).
- Content(Contains("Conflicts!")).
- Confirm()
+ t.Actions().AcknowledgeConflicts()
t.Views().Files().
IsFocused().
@@ -68,10 +65,7 @@ var CherryPickConflicts = NewIntegrationTest(NewIntegrationTestArgs{
SelectNextItem().
PressPrimaryAction()
- t.ExpectPopup().Confirmation().
- Title(Equals("continue")).
- Content(Contains("all merge conflicts resolved. Continue?")).
- Confirm()
+ t.Actions().ContinueOnConflictsResolved()
t.Views().Files().IsEmpty()
diff --git a/pkg/integration/tests/file/discard_changes.go b/pkg/integration/tests/file/discard_changes.go
index f3fc11a01..7a05f4466 100644
--- a/pkg/integration/tests/file/discard_changes.go
+++ b/pkg/integration/tests/file/discard_changes.go
@@ -99,10 +99,7 @@ var DiscardChanges = NewIntegrationTest(NewIntegrationTestArgs{
{status: "DU", label: "deleted-us.txt", menuTitle: "deleted-us.txt"},
})
- t.ExpectPopup().Confirmation().
- Title(Equals("continue")).
- Content(Contains("all merge conflicts resolved. Continue?")).
- Cancel()
+ t.Actions().ContinueOnConflictsResolved()
discardOneByOne([]statusFile{
{status: "MD", label: "change-delete.txt", menuTitle: "change-delete.txt"},
diff --git a/pkg/integration/tests/interactive_rebase/swap_in_rebase_with_conflict.go b/pkg/integration/tests/interactive_rebase/swap_in_rebase_with_conflict.go
index e177dd0cb..96b490a7f 100644
--- a/pkg/integration/tests/interactive_rebase/swap_in_rebase_with_conflict.go
+++ b/pkg/integration/tests/interactive_rebase/swap_in_rebase_with_conflict.go
@@ -49,21 +49,7 @@ var SwapInRebaseWithConflict = NewIntegrationTest(NewIntegrationTestArgs{
})
func handleConflictsFromSwap(t *TestDriver) {
- continueMerge := func() {
- t.ExpectPopup().Confirmation().
- Title(Equals("continue")).
- Content(Contains("all merge conflicts resolved. Continue?")).
- Confirm()
- }
-
- acceptConflicts := func() {
- t.ExpectPopup().Confirmation().
- Title(Equals("Auto-merge failed")).
- Content(Contains("Conflicts!")).
- Confirm()
- }
-
- acceptConflicts()
+ t.Actions().AcknowledgeConflicts()
t.Views().Files().
IsFocused().
@@ -84,9 +70,9 @@ func handleConflictsFromSwap(t *TestDriver) {
SelectNextItem().
PressPrimaryAction() // pick "three"
- continueMerge()
+ t.Actions().ContinueOnConflictsResolved()
- acceptConflicts()
+ t.Actions().AcknowledgeConflicts()
t.Views().Files().
IsFocused().
@@ -107,7 +93,7 @@ func handleConflictsFromSwap(t *TestDriver) {
SelectNextItem().
PressPrimaryAction() // pick "two"
- continueMerge()
+ t.Actions().ContinueOnConflictsResolved()
t.Views().Commits().
Focus().
diff --git a/pkg/integration/tests/sync/pull_merge.go b/pkg/integration/tests/sync/pull_merge.go
new file mode 100644
index 000000000..86f828570
--- /dev/null
+++ b/pkg/integration/tests/sync/pull_merge.go
@@ -0,0 +1,53 @@
+package sync
+
+import (
+ "github.com/jesseduffield/lazygit/pkg/config"
+ . "github.com/jesseduffield/lazygit/pkg/integration/components"
+)
+
+var PullMerge = NewIntegrationTest(NewIntegrationTestArgs{
+ Description: "Pull with a merge strategy",
+ ExtraCmdArgs: "",
+ Skip: false,
+ SetupConfig: func(config *config.AppConfig) {},
+ SetupRepo: func(shell *Shell) {
+ shell.CreateFileAndAdd("file", "content1")
+ shell.Commit("one")
+ shell.UpdateFileAndAdd("file", "content2")
+ shell.Commit("two")
+ shell.EmptyCommit("three")
+
+ shell.CloneIntoRemote("origin")
+
+ shell.SetBranchUpstream("master", "origin/master")
+
+ shell.HardReset("HEAD^^")
+ shell.EmptyCommit("four")
+
+ shell.SetConfig("pull.rebase", "false")
+ },
+ Run: func(t *TestDriver, keys config.KeybindingConfig) {
+ t.Views().Commits().
+ Lines(
+ Contains("four"),
+ Contains("one"),
+ )
+
+ t.Views().Status().Content(Contains("↓2 repo → master"))
+
+ t.Views().Files().
+ IsFocused().
+ Press(keys.Universal.Pull)
+
+ t.Views().Status().Content(Contains("↑2 repo → master"))
+
+ t.Views().Commits().
+ Lines(
+ Contains("Merge branch 'master' of ../origin"),
+ Contains("three"),
+ Contains("two"),
+ Contains("four"),
+ Contains("one"),
+ )
+ },
+})
diff --git a/pkg/integration/tests/sync/pull_merge_conflict.go b/pkg/integration/tests/sync/pull_merge_conflict.go
new file mode 100644
index 000000000..447c11135
--- /dev/null
+++ b/pkg/integration/tests/sync/pull_merge_conflict.go
@@ -0,0 +1,84 @@
+package sync
+
+import (
+ "github.com/jesseduffield/lazygit/pkg/config"
+ . "github.com/jesseduffield/lazygit/pkg/integration/components"
+)
+
+var PullMergeConflict = NewIntegrationTest(NewIntegrationTestArgs{
+ Description: "Pull with a merge strategy, where a conflict occurs",
+ ExtraCmdArgs: "",
+ Skip: false,
+ SetupConfig: func(config *config.AppConfig) {},
+ SetupRepo: func(shell *Shell) {
+ shell.CreateFileAndAdd("file", "content1")
+ shell.Commit("one")
+ shell.UpdateFileAndAdd("file", "content2")
+ shell.Commit("two")
+ shell.EmptyCommit("three")
+
+ shell.CloneIntoRemote("origin")
+
+ shell.SetBranchUpstream("master", "origin/master")
+
+ shell.HardReset("HEAD^^")
+ shell.UpdateFileAndAdd("file", "content4")
+ shell.Commit("four")
+
+ shell.SetConfig("pull.rebase", "false")
+ },
+ Run: func(t *TestDriver, keys config.KeybindingConfig) {
+ t.Views().Commits().
+ Lines(
+ Contains("four"),
+ Contains("one"),
+ )
+
+ t.Views().Status().Content(Contains("↓2 repo → master"))
+
+ t.Views().Files().
+ IsFocused().
+ Press(keys.Universal.Pull)
+
+ t.Actions().AcknowledgeConflicts()
+
+ t.Views().Files().
+ IsFocused().
+ Lines(
+ Contains("UU").Contains("file"),
+ ).
+ PressEnter()
+
+ t.Views().MergeConflicts().
+ IsFocused().
+ TopLines(
+ Contains("<<<<<<< HEAD"),
+ Contains("content4"),
+ Contains("======="),
+ Contains("content2"),
+ Contains(">>>>>>>"),
+ ).
+ PressPrimaryAction() // choose 'content4'
+
+ t.Actions().ContinueOnConflictsResolved()
+
+ t.Views().Status().Content(Contains("↑2 repo → master"))
+
+ t.Views().Commits().
+ Focus().
+ Lines(
+ Contains("Merge branch 'master' of ../origin").IsSelected(),
+ Contains("three"),
+ Contains("two"),
+ Contains("four"),
+ Contains("one"),
+ )
+
+ t.Views().Main().
+ Content(
+ Contains("- content4").
+ Contains(" -content2").
+ Contains("++content4"),
+ )
+ },
+})
diff --git a/pkg/integration/tests/sync/pull_rebase.go b/pkg/integration/tests/sync/pull_rebase.go
new file mode 100644
index 000000000..ca4c851d6
--- /dev/null
+++ b/pkg/integration/tests/sync/pull_rebase.go
@@ -0,0 +1,52 @@
+package sync
+
+import (
+ "github.com/jesseduffield/lazygit/pkg/config"
+ . "github.com/jesseduffield/lazygit/pkg/integration/components"
+)
+
+var PullRebase = NewIntegrationTest(NewIntegrationTestArgs{
+ Description: "Pull with a rebase strategy",
+ ExtraCmdArgs: "",
+ Skip: false,
+ SetupConfig: func(config *config.AppConfig) {},
+ SetupRepo: func(shell *Shell) {
+ shell.CreateFileAndAdd("file", "content1")
+ shell.Commit("one")
+ shell.UpdateFileAndAdd("file", "content2")
+ shell.Commit("two")
+ shell.EmptyCommit("three")
+
+ shell.CloneIntoRemote("origin")
+
+ shell.SetBranchUpstream("master", "origin/master")
+
+ shell.HardReset("HEAD^^")
+ shell.EmptyCommit("four")
+
+ shell.SetConfig("pull.rebase", "true")
+ },
+ Run: func(t *TestDriver, keys config.KeybindingConfig) {
+ t.Views().Commits().
+ Lines(
+ Contains("four"),
+ Contains("one"),
+ )
+
+ t.Views().Status().Content(Contains("↓2 repo → master"))
+
+ t.Views().Files().
+ IsFocused().
+ Press(keys.Universal.Pull)
+
+ t.Views().Status().Content(Contains("↑1 repo → master"))
+
+ t.Views().Commits().
+ Lines(
+ Contains("four"),
+ Contains("three"),
+ Contains("two"),
+ Contains("one"),
+ )
+ },
+})
diff --git a/pkg/integration/tests/sync/pull_rebase_conflict.go b/pkg/integration/tests/sync/pull_rebase_conflict.go
new file mode 100644
index 000000000..4ea419a74
--- /dev/null
+++ b/pkg/integration/tests/sync/pull_rebase_conflict.go
@@ -0,0 +1,83 @@
+package sync
+
+import (
+ "github.com/jesseduffield/lazygit/pkg/config"
+ . "github.com/jesseduffield/lazygit/pkg/integration/components"
+)
+
+var PullRebaseConflict = NewIntegrationTest(NewIntegrationTestArgs{
+ Description: "Pull with a rebase strategy, where a conflict occurs",
+ ExtraCmdArgs: "",
+ Skip: false,
+ SetupConfig: func(config *config.AppConfig) {},
+ SetupRepo: func(shell *Shell) {
+ shell.CreateFileAndAdd("file", "content1")
+ shell.Commit("one")
+ shell.UpdateFileAndAdd("file", "content2")
+ shell.Commit("two")
+ shell.EmptyCommit("three")
+
+ shell.CloneIntoRemote("origin")
+
+ shell.SetBranchUpstream("master", "origin/master")
+
+ shell.HardReset("HEAD^^")
+ shell.UpdateFileAndAdd("file", "content4")
+ shell.Commit("four")
+
+ shell.SetConfig("pull.rebase", "true")
+ },
+ Run: func(t *TestDriver, keys config.KeybindingConfig) {
+ t.Views().Commits().
+ Lines(
+ Contains("four"),
+ Contains("one"),
+ )
+
+ t.Views().Status().Content(Contains("↓2 repo → master"))
+
+ t.Views().Files().
+ IsFocused().
+ Press(keys.Universal.Pull)
+
+ t.Actions().AcknowledgeConflicts()
+
+ t.Views().Files().
+ IsFocused().
+ Lines(
+ Contains("UU").Contains("file"),
+ ).
+ PressEnter()
+
+ t.Views().MergeConflicts().
+ IsFocused().
+ TopLines(
+ Contains("<<<<<<< HEAD"),
+ Contains("content2"),
+ Contains("======="),
+ Contains("content4"),
+ Contains(">>>>>>>"),
+ ).
+ SelectNextItem().
+ PressPrimaryAction() // choose 'content4'
+
+ t.Actions().ContinueOnConflictsResolved()
+
+ t.Views().Status().Content(Contains("↑1 repo → master"))
+
+ t.Views().Commits().
+ Focus().
+ Lines(
+ Contains("four").IsSelected(),
+ Contains("three"),
+ Contains("two"),
+ Contains("one"),
+ )
+
+ t.Views().Main().
+ Content(
+ Contains("-content2").
+ Contains("+content4"),
+ )
+ },
+})
diff --git a/pkg/integration/tests/sync/pull_rebase_interactive_conflict.go b/pkg/integration/tests/sync/pull_rebase_interactive_conflict.go
new file mode 100644
index 000000000..da45f70ed
--- /dev/null
+++ b/pkg/integration/tests/sync/pull_rebase_interactive_conflict.go
@@ -0,0 +1,95 @@
+package sync
+
+import (
+ "github.com/jesseduffield/lazygit/pkg/config"
+ . "github.com/jesseduffield/lazygit/pkg/integration/components"
+)
+
+var PullRebaseInteractiveConflict = NewIntegrationTest(NewIntegrationTestArgs{
+ Description: "Pull with an interactive rebase strategy, where a conflict occurs",
+ ExtraCmdArgs: "",
+ Skip: false,
+ SetupConfig: func(config *config.AppConfig) {},
+ SetupRepo: func(shell *Shell) {
+ shell.CreateFileAndAdd("file", "content1")
+ shell.Commit("one")
+ shell.UpdateFileAndAdd("file", "content2")
+ shell.Commit("two")
+ shell.EmptyCommit("three")
+
+ shell.CloneIntoRemote("origin")
+
+ shell.SetBranchUpstream("master", "origin/master")
+
+ shell.HardReset("HEAD^^")
+ shell.UpdateFileAndAdd("file", "content4")
+ shell.Commit("four")
+ shell.EmptyCommit("five")
+
+ shell.SetConfig("pull.rebase", "interactive")
+ },
+ Run: func(t *TestDriver, keys config.KeybindingConfig) {
+ t.Views().Commits().
+ Lines(
+ Contains("five"),
+ Contains("four"),
+ Contains("one"),
+ )
+
+ t.Views().Status().Content(Contains("↓2 repo → master"))
+
+ t.Views().Files().
+ IsFocused().
+ Press(keys.Universal.Pull)
+
+ t.Actions().AcknowledgeConflicts()
+
+ t.Views().Commits().
+ Lines(
+ Contains("pick").Contains("five"),
+ Contains("YOU ARE HERE").Contains("three"),
+ Contains("two"),
+ Contains("one"),
+ )
+
+ t.Views().Files().
+ IsFocused().
+ Lines(
+ Contains("UU").Contains("file"),
+ ).
+ PressEnter()
+
+ t.Views().MergeConflicts().
+ IsFocused().
+ TopLines(
+ Contains("<<<<<<< HEAD"),
+ Contains("content2"),
+ Contains("======="),
+ Contains("content4"),
+ Contains(">>>>>>>"),
+ ).
+ SelectNextItem().
+ PressPrimaryAction() // choose 'content4'
+
+ t.Actions().ContinueOnConflictsResolved()
+
+ t.Views().Status().Content(Contains("↑2 repo → master"))
+
+ t.Views().Commits().
+ Focus().
+ Lines(
+ Contains("five").IsSelected(),
+ Contains("four"),
+ Contains("three"),
+ Contains("two"),
+ Contains("one"),
+ ).
+ SelectNextItem()
+
+ t.Views().Main().
+ Content(
+ Contains("-content2").
+ Contains("+content4"),
+ )
+ },
+})
diff --git a/pkg/integration/tests/sync/pull_rebase_interactive_conflict_drop.go b/pkg/integration/tests/sync/pull_rebase_interactive_conflict_drop.go
new file mode 100644
index 000000000..580a2af5b
--- /dev/null
+++ b/pkg/integration/tests/sync/pull_rebase_interactive_conflict_drop.go
@@ -0,0 +1,101 @@
+package sync
+
+import (
+ "github.com/jesseduffield/lazygit/pkg/config"
+ . "github.com/jesseduffield/lazygit/pkg/integration/components"
+)
+
+var PullRebaseInteractiveConflictDrop = NewIntegrationTest(NewIntegrationTestArgs{
+ Description: "Pull with an interactive rebase strategy, where a conflict occurs. Also drop a commit while rebasing",
+ ExtraCmdArgs: "",
+ Skip: false,
+ SetupConfig: func(config *config.AppConfig) {},
+ SetupRepo: func(shell *Shell) {
+ shell.CreateFileAndAdd("file", "content1")
+ shell.Commit("one")
+ shell.UpdateFileAndAdd("file", "content2")
+ shell.Commit("two")
+ shell.EmptyCommit("three")
+
+ shell.CloneIntoRemote("origin")
+
+ shell.SetBranchUpstream("master", "origin/master")
+
+ shell.HardReset("HEAD^^")
+ shell.UpdateFileAndAdd("file", "content4")
+ shell.Commit("four")
+ shell.EmptyCommit("five")
+
+ shell.SetConfig("pull.rebase", "interactive")
+ },
+ Run: func(t *TestDriver, keys config.KeybindingConfig) {
+ t.Views().Commits().
+ Lines(
+ Contains("five"),
+ Contains("four"),
+ Contains("one"),
+ )
+
+ t.Views().Status().Content(Contains("↓2 repo → master"))
+
+ t.Views().Files().
+ IsFocused().
+ Press(keys.Universal.Pull)
+
+ t.Actions().AcknowledgeConflicts()
+
+ t.Views().Commits().
+ Focus().
+ Lines(
+ Contains("pick").Contains("five").IsSelected(),
+ Contains("YOU ARE HERE").Contains("three"),
+ Contains("two"),
+ Contains("one"),
+ ).
+ Press(keys.Universal.Remove).
+ Lines(
+ Contains("drop").Contains("five").IsSelected(),
+ Contains("YOU ARE HERE").Contains("three"),
+ Contains("two"),
+ Contains("one"),
+ )
+
+ t.Views().Files().
+ Focus().
+ Lines(
+ Contains("UU").Contains("file"),
+ ).
+ PressEnter()
+
+ t.Views().MergeConflicts().
+ IsFocused().
+ TopLines(
+ Contains("<<<<<<< HEAD"),
+ Contains("content2"),
+ Contains("======="),
+ Contains("content4"),
+ Contains(">>>>>>>"),
+ ).
+ SelectNextItem().
+ PressPrimaryAction() // choose 'content4'
+
+ t.Actions().ContinueOnConflictsResolved()
+
+ t.Views().Status().Content(Contains("↑1 repo → master"))
+
+ t.Views().Commits().
+ Focus().
+ Lines(
+ Contains("four").IsSelected(),
+ Contains("three"),
+ Contains("two"),
+ Contains("one"),
+ )
+
+ t.Views().Main().
+ Content(
+ Contains("-content2").
+ Contains("+content4"),
+ )
+ },
+})
diff --git a/pkg/integration/tests/tests_gen.go b/pkg/integration/tests/tests_gen.go
index 635451b54..c99870d43 100644
--- a/pkg/integration/tests/tests_gen.go
+++ b/pkg/integration/tests/tests_gen.go
@@ -121,6 +121,12 @@ var tests = []*components.IntegrationTest{
sync.ForcePushMultipleUpstream,
sync.Pull,
sync.PullAndSetUpstream,
+ sync.PullMerge,
+ sync.PullMergeConflict,
+ sync.PullRebase,
+ sync.PullRebaseConflict,
+ sync.PullRebaseInteractiveConflict,
+ sync.PullRebaseInteractiveConflictDrop,
sync.Push,
sync.PushAndAutoSetUpstream,
sync.PushAndSetUpstream,