From patchwork Tue May 30 19:47:15 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [remotenames] pull: fix pull --rebase with a --tool argument From: Adam Simpkins X-Patchwork-Id: 21074 Message-Id: <3988f1c49f0d86d6e0c8.1496173635@devbig125.prn1.facebook.com> To: Date: Tue, 30 May 2017 12:47:15 -0700 # HG changeset patch # User Adam Simpkins # Date 1496173480 25200 # Tue May 30 12:44:40 2017 -0700 # Node ID 3988f1c49f0d86d6e0c8a7bbfaf738d70fddf916 # Parent 78c8966c02759755235a6566e0c557b82ff9cb0a pull: fix pull --rebase with a --tool argument The code previously stripped off the --rebase argument when invoking the original pull() command code, but did not strip off --tool, causing the command to incorrectly fail. This fixes the code to also strip off --tool when invoking pull, and then pass this argument in when doing the rebase. However, the way the rebase code invokes merge does seem to result in rather confusing behavior: the "internal:other" tool preserves the local changes, while "internal:local" preserves the changes pulled from the remote. diff --git a/remotenames.py b/remotenames.py --- a/remotenames.py +++ b/remotenames.py @@ -880,8 +880,9 @@ if dest: # Let `pull` do its thing without `rebase.py->pullrebase()` del opts['rebase'] + tool = opts.pop('tool', '') ret = orig(ui, repo, source, **opts) - return ret or rebasemodule.rebase(ui, repo, dest=dest) + return ret or rebasemodule.rebase(ui, repo, dest=dest, tool=tool) else: return orig(ui, repo, source, **opts) diff --git a/tests/test-pull-rebase.t b/tests/test-pull-rebase.t --- a/tests/test-pull-rebase.t +++ b/tests/test-pull-rebase.t @@ -151,3 +151,62 @@ $ hg -q pull $ hg log -l 1 --template="{desc} {remotenames}\n" between_pull default/bookmarkonremote default/default + +Test pull with --rebase and --tool + $ cd ../remoterepo + $ hg up bookmarkonremote -q + $ echo remotechanges > editedbyboth + $ hg add editedbyboth + $ mkcommit remotecommit + $ cd ../localrepo + $ hg book -t default/bookmarkonremote -r default/bookmarkonremote tracking2 + $ hg update tracking2 -q + $ echo localchanges > editedbyboth + $ hg add editedbyboth + $ mkcommit somelocalchanges + $ printdag + @ somelocalchanges | tracking2 | + | + o between_pull | | default/bookmarkonremote + | + o foo | | + | + | o localcommit | bmnottracking tracking | + | | + | o untrackedremotecommit | | + | | + o | trackedremotecommit | | + |/ + o root | | + + $ hg pull --rebase --tool internal:union + pulling from $TESTTMP/remoterepo + searching for changes + adding changesets + adding manifests + adding file changes + added 1 changesets with 2 changes to 2 files (+1 heads) + (run 'hg heads .' to see heads, 'hg merge' to merge) + rebasing 6:1d01e32a0efb "somelocalchanges" (tracking2) + merging editedbyboth + saved backup bundle to $TESTTMP/localrepo/.hg/strip-backup/*-backup.hg (glob) + $ printdag + @ somelocalchanges | tracking2 | + | + o remotecommit | | default/bookmarkonremote + | + o between_pull | | + | + o foo | | + | + | o localcommit | bmnottracking tracking | + | | + | o untrackedremotecommit | | + | | + o | trackedremotecommit | | + |/ + o root | | + + $ cat editedbyboth + remotechanges + localchanges