[PATCH hglib] merge and resolve return boolean instead of raising an exception

Idan Kamara idankk86 at gmail.com
Thu Jan 26 12:42:00 CST 2012


On Thu, Jan 26, 2012 at 8:30 PM, Andrey Somov <py4fun at gmail.com> wrote:

> # HG changeset patch
> # User py4fun
> # Date 1327602055 -3600
> # Node ID daa30292d864b8b1b94ee0f4393d1c98ba2fdfc0
> # Parent  e5d3b0aa48e6ab79531204f61e25ee335b306df3
> merge and resolve return boolean instead of raising an exception
>

Please use the standard first line in a commit message, e.g. topic: short
summary
So this should read: merge: return False on unresolved files, or something
similar.

Also, there are several changes here that deserve their own patch, see
below.


>
> diff -r e5d3b0aa48e6 -r daa30292d864 hglib/client.py
> --- a/hglib/client.py   Tue Jan 17 17:15:47 2012 -0600
> +++ b/hglib/client.py   Thu Jan 26 19:20:55 2012 +0100
> @@ -999,6 +999,8 @@
>         removed it. It can be one of merge.handlers, or a function that
> gets a
>         single argument which are the contents of stdout. It should return
> one
>         of the expected choices (a single character).
> +
> +        Returns True on success, False if there are unresolved files.
>         """
>         # we can't really use --preview since merge doesn't support
> --template
>         args = cmdbuilder('merge', r=rev, f=force, t=tool)
> @@ -1011,7 +1013,9 @@
>         else:
>             prompt = lambda size, output: cb(output) + '\n'
>
> -        self.rawcommand(args, prompt=prompt)
> +        eh = util.reterrorhandler(args)
> +        self.rawcommand(args, prompt=prompt, eh=eh)
> +        return bool(eh)
>
>     def move(self, source, dest, after=False, force=False, dryrun=False,
>              include=None, exclude=None):
> @@ -1237,13 +1241,16 @@
>         args = cmdbuilder('resolve', a=all, l=listfiles, m=mark, u=unmark,
>                           t=tool, I=include, X=exclude, *file)
>
> -        out = self.rawcommand(args)
> +        eh = util.reterrorhandler(args)
> +        out = self.rawcommand(args, eh=eh)
>
>         if listfiles:
>             l = []
>             for line in out.splitlines():
>                 l.append(tuple(line.split(' ', 1)))
>             return l
> +        else:
> +            return bool(eh)
>

Split the changes to resolve and merge into two separate
patches.


>
>     def revert(self, files, rev=None, all=False, date=None, nobackup=False,
>                dryrun=False, include=None, exclude=None):
> diff -r e5d3b0aa48e6 -r daa30292d864 hglib/context.py
> --- a/hglib/context.py  Tue Jan 17 17:15:47 2012 -0600
> +++ b/hglib/context.py  Thu Jan 26 19:20:55 2012 +0100
> @@ -205,4 +205,4 @@
>         """
>         return the ancestor context of self and c2
>         """
> -        return changectx(self._repo, 'ancestor(%s, %s)' % (self, n2))
> +        return changectx(self._repo, 'ancestor(%s, %s)' % (self, c2))
>

Nice catch, but unrelated. Send in a new patch (a line that tests
this in test-context.py would be nice too).


> diff -r e5d3b0aa48e6 -r daa30292d864 tests/test-merge.py
> --- a/tests/test-merge.py       Tue Jan 17 17:15:47 2012 -0600
> +++ b/tests/test-merge.py       Thu Jan 26 19:20:55 2012 +0100
> @@ -14,7 +14,7 @@
>         self.client.update(self.node0)
>         self.append('b', 'a')
>         rev, node2 = self.client.commit('new file', addremove=True)
> -        self.client.merge(self.node1)
> +        self.assertTrue(self.client.merge(self.node1))
>         rev, node = self.client.commit('merge')
>         diff = """diff -r %s -r %s a
>  --- a/a
> @@ -40,7 +40,7 @@
>         self.client.remove('a')
>         rev, node = self.client.commit('remove')
>
> -        self.client.merge(cb=hglib.merge.handlers.noninteractive)
> +
>  self.assertTrue(self.client.merge(cb=hglib.merge.handlers.noninteractive))
>
>         diff = """diff -r %s a
>  --- /dev/null
> @@ -59,7 +59,7 @@
>         def cb(output):
>             return 'c'
>
> -        self.client.merge(cb=cb)
> +        self.assertTrue(self.client.merge(cb=cb))
>
>         diff = """diff -r %s a
>  --- /dev/null
> diff -r e5d3b0aa48e6 -r daa30292d864 tests/test-resolve.py
> --- a/tests/test-resolve.py     Tue Jan 17 17:15:47 2012 -0600
> +++ b/tests/test-resolve.py     Thu Jan 26 19:20:55 2012 +0100
> @@ -18,12 +18,12 @@
>         self.append('b', 'a')
>         rev, self.node3 = self.client.commit('third')
>
> -        self.assertRaises(hglib.error.CommandError, self.client.merge,
> self.node1)
> -        self.assertRaises(hglib.error.CommandError, self.client.resolve,
> all=True)
> +        self.assertFalse(self.client.merge(self.node1))
> +        self.assertFalse(self.client.resolve(all=True))
>
>         self.assertEquals([('U', 'a'), ('U', 'b')],
>                           self.client.resolve(listfiles=True))
>
> -        self.client.resolve('a', mark=True)
> +        self.assertTrue(self.client.resolve('a', mark=True))
>         self.assertEquals([('R', 'a'), ('U', 'b')],
>                           self.client.resolve(listfiles=True))
> diff -r e5d3b0aa48e6 -r daa30292d864 tests/test-summary.py
> --- a/tests/test-summary.py     Tue Jan 17 17:15:47 2012 -0600
> +++ b/tests/test-summary.py     Thu Jan 26 19:20:55 2012 +0100
> @@ -103,7 +103,7 @@
>         self.append('b', 'a')
>         rev2, node2 = self.client.commit('third', addremove=True)
>
> -        self.client.merge(rev1)
> +        self.assertTrue(self.client.merge(rev1))
>
>         d = {'parent' : [(2, node2[:12], 'tip', 'third'),
>                          (1, node1[:12], None, 'second')],
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://selenic.com/pipermail/mercurial-devel/attachments/20120126/9550e9ad/attachment.html>


More information about the Mercurial-devel mailing list