D2409: graft: add no-commit mode (issue5631)

khanchi97 (Sushil khanchi) phabricator at mercurial-scm.org
Fri Mar 2 05:37:02 EST 2018


khanchi97 updated this revision to Diff 6325.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D2409?vs=6132&id=6325

REVISION DETAIL
  https://phab.mercurial-scm.org/D2409

AFFECTED FILES
  mercurial/commands.py
  tests/test-graft.t

CHANGE DETAILS

diff --git a/tests/test-graft.t b/tests/test-graft.t
--- a/tests/test-graft.t
+++ b/tests/test-graft.t
@@ -1373,3 +1373,69 @@
   note: graft of 7:d3c3f2b38ecc created no changes to commit
 
   $ cd ..
+
+Graft a change from a branch without making any commit using --no-commit option
+
+  $ hg init dirtochecknocommit
+  $ cd dirtochecknocommit
+  $ echo a > a
+  $ hg ci -qAm0
+  $ echo b > b
+  $ hg ci -qAm1
+  $ hg up -q 0
+  $ echo c > c
+  $ hg ci -qAm2
+  $ hg graft 1 --no-commit
+  grafting 1:925d80f479bb "1"
+
+  $ hg tip -T "rev: {rev}\n"
+  rev: 2
+
+  $ hg diff
+  diff -r db815d6d32e6 b
+  --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+  +++ b/b	Thu Jan 01 00:00:00 1970 +0000
+  @@ -0,0 +1,1 @@
+  +b
+
+  $ hg ci -qm3
+
+Make a conflict between two heads and check --no-commit is resepected after --continue 
+
+  $ echo A>a
+  $ hg ci -qm4
+  $ hg up -q 1
+  $ echo B>a
+  $ hg ci -qm5
+  $ hg graft 4 --no-commit
+  grafting 4:a08bb3910e7c "4"
+  merging a
+  warning: conflicts while merging a! (edit, then use 'hg resolve --mark')
+  abort: unresolved conflicts, can't continue
+  (use 'hg resolve' and 'hg graft --continue')
+  [255]
+
+Edit:
+
+  $ echo A>a
+  $ hg resolve --mark
+  (no more unresolved files)
+  continue: hg graft --continue
+
+Continue:
+
+  $ hg graft --continue
+  grafting 4:a08bb3910e7c "4"
+
+  $ hg tip -T "rev: {rev}\n"
+  rev: 5
+
+  $ hg diff
+  diff -r b1d5b5056844 a
+  --- a/a	Thu Jan 01 00:00:00 1970 +0000
+  +++ b/a	Thu Jan 01 00:00:00 1970 +0000
+  @@ -1,1 +1,1 @@
+  -B
+  +A
+
+  $ cd ..
diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -2074,6 +2074,8 @@
      ('c', 'continue', False, _('resume interrupted graft')),
      ('e', 'edit', False, _('invoke editor on commit messages')),
      ('', 'log', None, _('append graft info to log message')),
+     ('', 'no-commit', None,
+      _("don't commit, just apply the changes in working directory")),
      ('f', 'force', False, _('force graft')),
      ('D', 'currentdate', False,
       _('record the current date as commit date')),
@@ -2168,7 +2170,8 @@
             raise error.Abort(_("can't specify --continue and revisions"))
         # read in unfinished revisions
         try:
-            nodes = repo.vfs.read('graftstate').splitlines()
+            lines = repo.vfs.read('graftstate').splitlines()
+            nodes = lines[1:]
             revs = [repo[node].rev() for node in nodes]
         except IOError as inst:
             if inst.errno != errno.ENOENT:
@@ -2297,8 +2300,15 @@
             # report any conflicts
             if stats and stats[3] > 0:
                 # write out state for --continue
+                if opts.get('no_commit') and pos == 0:
+                    repo.vfs.write('graftstate', 'True\n')
+                elif repo.vfs.exists('graftstate'):
+                    lines = repo.vfs.read('graftstate').splitlines()
+                    repo.vfs.write('graftstate', lines[0] + '\n')
+                else:
+                    repo.vfs.write('graftstate', 'False\n')
                 nodelines = [repo[rev].hex() + "\n" for rev in revs[pos:]]
-                repo.vfs.write('graftstate', ''.join(nodelines))
+                repo.vfs.append('graftstate', ''.join(nodelines))
                 extra = ''
                 if opts.get('user'):
                     extra += ' --user %s' % util.shellquote(opts['user'])
@@ -2314,12 +2324,17 @@
             cont = False
 
         # commit
-        node = repo.commit(text=message, user=user,
-                    date=date, extra=extra, editor=editor)
-        if node is None:
-            ui.warn(
-                _('note: graft of %d:%s created no changes to commit\n') %
-                (ctx.rev(), ctx))
+        nocommitflag = 'False'
+        if opts.get('continue'):
+            lines = repo.vfs.read('graftstate').splitlines()
+            nocommitflag = lines[0]
+        if not (opts.get('no_commit') or nocommitflag == 'True'):
+            node = repo.commit(text=message, user=user,
+                        date=date, extra=extra, editor=editor)
+            if node is None:
+                ui.warn(
+                    _('note: graft of %d:%s created no changes to commit\n') %
+                    (ctx.rev(), ctx))
 
     # remove state when we complete successfully
     if not opts.get('dry_run'):



To: khanchi97, #hg-reviewers
Cc: pulkit, mercurial-devel


More information about the Mercurial-devel mailing list