[PATCH] revert: makes interactive mode ask user if he wants to forget added files (issue4936)

Augie Fackler raf at durin42.com
Fri Feb 5 10:54:24 EST 2016


On Fri, Feb 05, 2016 at 10:47:33AM -0500, Augie Fackler wrote:
> On Fri, Feb 05, 2016 at 03:20:26PM +0100, liscju wrote:
> > # HG changeset patch
> > # User liscju <piotr.listkiewicz at gmail.com>
> > # Date 1454681920 -3600
> > #      Fri Feb 05 15:18:40 2016 +0100
> > # Node ID bfd4cc9096ee1b3d451e8f68c767b93644488f00
> > # Parent  01a5143cd25f285f8c745a92986cd7186bb32c90
> > revert: makes interactive mode ask user if he wants to forget added files (issue4936)
>
> Queued, very nice.

But check-code and check-commit both send seasonal greetings (will fix
in flight).

>
> >
> > Before this patch revert interactive mode unconditionally forgets
> > added files. This patch fixes this by asking user if he wants
> > to forget added file. If user doesn't want to forget given file,
> > it is added to matcher_opts exclude list, to not reviewing it
> > later with other modified files.
> >
> > diff -r 01a5143cd25f -r bfd4cc9096ee mercurial/cmdutil.py
> > --- a/mercurial/cmdutil.py	Wed Feb 03 16:24:24 2016 -0600
> > +++ b/mercurial/cmdutil.py	Fri Feb 05 15:18:40 2016 +0100
> > @@ -3130,13 +3130,25 @@
> >      """
> >      parent, p2 = parents
> >      node = ctx.node()
> > +    excluded_files = []
> > +    matcher_opts = {"exclude": excluded_files}
> > +
> >      def checkout(f):
> >          fc = ctx[f]
> >          repo.wwrite(f, fc.data(), fc.flags())
> >
> >      audit_path = pathutil.pathauditor(repo.root)
> >      for f in actions['forget'][0]:
> > -        repo.dirstate.drop(f)
> > +        if interactive:
> > +            choice = \
> > +                repo.ui.promptchoice(
> > +                    _("Would you like to forget file %s (Yn)? $$ &Yes $$ &No") % f)
> > +            if choice == 0:
> > +                repo.dirstate.drop(f)
> > +            else:
> > +                excluded_files.append(repo.wjoin(f))
> > +        else:
> > +            repo.dirstate.drop(f)
> >      for f in actions['remove'][0]:
> >          audit_path(f)
> >          try:
> > @@ -3162,7 +3174,7 @@
> >      if interactive:
> >          # Prompt the user for changes to revert
> >          torevert = [repo.wjoin(f) for f in actions['revert'][0]]
> > -        m = scmutil.match(ctx, torevert, {})
> > +        m = scmutil.match(ctx, torevert, matcher_opts)
> >          diffopts = patch.difffeatureopts(repo.ui, whitespace=True)
> >          diffopts.nodates = True
> >          diffopts.git = True
> > diff -r 01a5143cd25f -r bfd4cc9096ee tests/test-revert-interactive.t
> > --- a/tests/test-revert-interactive.t	Wed Feb 03 16:24:24 2016 -0600
> > +++ b/tests/test-revert-interactive.t	Fri Feb 05 15:18:40 2016 +0100
> > @@ -15,6 +15,7 @@
> >    > interactive = true
> >    > [extensions]
> >    > record =
> > +  > purge =
> >    > EOF
> >
> >
> > @@ -377,3 +378,26 @@
> >     5
> >     d
> >    +lastline
> > +
> > +  $ hg update -C .
> > +  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
> > +  $ hg purge
> > +  $ touch newfile
> > +  $ hg add newfile
> > +  $ hg status
> > +  A newfile
> > +  $ hg revert -i <<EOF
> > +  > n
> > +  > EOF
> > +  forgetting newfile
> > +  Would you like to forget file newfile (Yn)?  n
> > +  $ hg status
> > +  A newfile
> > +  $ hg revert -i <<EOF
> > +  > y
> > +  > EOF
> > +  forgetting newfile
> > +  Would you like to forget file newfile (Yn)?  y
> > +  $ hg status
> > +  ? newfile
> > +
> > _______________________________________________
> > Mercurial-devel mailing list
> > Mercurial-devel at mercurial-scm.org
> > https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


More information about the Mercurial-devel mailing list