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

login
register
mail settings
Submitter phabricator
Date Feb. 26, 2018, 8:28 p.m.
Message ID <efb22f90dc8a6b613ff6205c7d2c5ef9@localhost.localdomain>
Download mbox | patch
Permalink /patch/28419/
State Not Applicable
Headers show

Comments

phabricator - Feb. 26, 2018, 8:28 p.m.
khanchi97 updated this revision to Diff 6132.

REPOSITORY
  rHG Mercurial

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

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

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

CHANGE DETAILS




To: khanchi97, #hg-reviewers
Cc: pulkit, mercurial-devel
sushil khanchi - March 1, 2018, 2:56 a.m.
Hello there, Can I get a little review on this :)

On Tue, Feb 27, 2018 at 1:58 AM, khanchi97 (Sushil khanchi) <
phabricator@mercurial-scm.org> wrote:

> khanchi97 updated this revision to Diff 6132.
>
> REPOSITORY
>   rHG Mercurial
>
> CHANGES SINCE LAST UPDATE
>   https://phab.mercurial-scm.org/D2409?vs=6028&id=6132
>
> 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')),
> @@ -2153,6 +2155,9 @@
>      revs = list(revs)
>      revs.extend(opts.get('rev'))
>
> +    if opts.get('no_commit'):
> +        # write out flag for --continue
> +        repo.vfs.write('nocommitflag','do not commit\n')
>      if not opts.get('user') and opts.get('currentuser'):
>          opts['user'] = ui.username()
>      if not opts.get('date') and opts.get('currentdate'):
> @@ -2314,16 +2319,18 @@
>              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))
> +        if not repo.vfs.exists('nocommitflag'):
> +            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'):
>          repo.vfs.unlinkpath('graftstate', ignoremissing=True)
> +    repo.vfs.unlinkpath('nocommitflag', ignoremissing=True)
>
>      return 0
>
>
>
>
> To: khanchi97, #hg-reviewers
> Cc: pulkit, mercurial-devel
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel@mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
>

Patch

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')),
@@ -2153,6 +2155,9 @@ 
     revs = list(revs)
     revs.extend(opts.get('rev'))
 
+    if opts.get('no_commit'):
+        # write out flag for --continue
+        repo.vfs.write('nocommitflag','do not commit\n')
     if not opts.get('user') and opts.get('currentuser'):
         opts['user'] = ui.username()
     if not opts.get('date') and opts.get('currentdate'):
@@ -2314,16 +2319,18 @@ 
             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))
+        if not repo.vfs.exists('nocommitflag'):
+            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'):
         repo.vfs.unlinkpath('graftstate', ignoremissing=True)
+    repo.vfs.unlinkpath('nocommitflag', ignoremissing=True)
 
     return 0