Patchwork convert: handle empty intial commits while converting to svn

login
register
mail settings
Submitter Nikita Slyusarev
Date Feb. 7, 2019, 6:18 p.m.
Message ID <bde6d4eed3104a49c9d4.1549563536@nslus-osx>
Download mbox | patch
Permalink /patch/38525/
State Accepted
Headers show

Comments

Nikita Slyusarev - Feb. 7, 2019, 6:18 p.m.
# HG changeset patch
# User Nikita Slyusarev <nslus@yandex-team.com>
# Date 1549555074 -10800
#      Thu Feb 07 18:57:54 2019 +0300
# Node ID bde6d4eed3104a49c9d4558907d1af4af8718ba1
# Parent  67e622ade4155d89270ec7ce6928f5645317a5c1
convert: handle empty intial commits while converting to svn

Svn commit generation code skips empty commits, returning the parent.
Skipping the root commit must return None instead.

Added test to check skipping of empty commits.
Augie Fackler - Feb. 8, 2019, 6:51 p.m.
queued, thanks

> On Feb 7, 2019, at 13:18, Nikita Slyusarev <nslus@yandex-team.com> wrote:
> 
> # HG changeset patch
> # User Nikita Slyusarev <nslus@yandex-team.com>
> # Date 1549555074 -10800
> #      Thu Feb 07 18:57:54 2019 +0300
> # Node ID bde6d4eed3104a49c9d4558907d1af4af8718ba1
> # Parent  67e622ade4155d89270ec7ce6928f5645317a5c1
> convert: handle empty intial commits while converting to svn
> 
> Svn commit generation code skips empty commits, returning the parent.
> Skipping the root commit must return None instead.
> 
> Added test to check skipping of empty commits.
> 
> diff --git a/hgext/convert/subversion.py b/hgext/convert/subversion.py
> --- a/hgext/convert/subversion.py
> +++ b/hgext/convert/subversion.py
> @@ -1324,8 +1324,8 @@
>             try:
>                 rev = self.commit_re.search(output).group(1)
>             except AttributeError:
> -                if parents and not files:
> -                    return parents[0]
> +                if not files:
> +                    return parents[0] if parents else None
>                 self.ui.warn(_('unexpected svn output:\n'))
>                 self.ui.warn(output)
>                 raise error.Abort(_('unable to cope with svn output'))
> diff --git a/tests/test-convert-svn-sink.t b/tests/test-convert-svn-sink.t
> --- a/tests/test-convert-svn-sink.t
> +++ b/tests/test-convert-svn-sink.t
> @@ -466,3 +466,46 @@
>   msg: Add file a
>    A /a
>   $ rm -rf a a-hg a-hg-wc
> +
> +Skipping empty commits
> +
> +  $ hg init a
> +
> +  $ hg --cwd a --config ui.allowemptycommit=True ci -d '1 0' -m 'Initial empty commit'
> +
> +  $ echo a > a/a
> +  $ hg --cwd a ci -d '0 0' -A -m 'Some change'
> +  adding a
> +  $ hg --cwd a --config ui.allowemptycommit=True ci -d '2 0' -m 'Empty commit 1'
> +  $ hg --cwd a --config ui.allowemptycommit=True ci -d '3 0' -m 'Empty commit 2'
> +  $ echo b > a/b
> +  $ hg --cwd a ci -d '0 0' -A -m 'Another change'
> +  adding b
> +
> +  $ hg convert -d svn a
> +  assuming destination a-hg
> +  initializing svn repository 'a-hg'
> +  initializing svn working copy 'a-hg-wc'
> +  scanning source...
> +  sorting...
> +  converting...
> +  4 Initial empty commit
> +  3 Some change
> +  2 Empty commit 1
> +  1 Empty commit 2
> +  0 Another change
> +
> +  $ svnupanddisplay a-hg-wc 0
> +   2 1 test a
> +   2 2 test .
> +   2 2 test b
> +  revision: 2
> +  author: test
> +  msg: Another change
> +   A /b
> +  revision: 1
> +  author: test
> +  msg: Some change
> +   A /a
> +
> +  $ rm -rf a a-hg a-hg-wc
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel@mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Patch

diff --git a/hgext/convert/subversion.py b/hgext/convert/subversion.py
--- a/hgext/convert/subversion.py
+++ b/hgext/convert/subversion.py
@@ -1324,8 +1324,8 @@ 
             try:
                 rev = self.commit_re.search(output).group(1)
             except AttributeError:
-                if parents and not files:
-                    return parents[0]
+                if not files:
+                    return parents[0] if parents else None
                 self.ui.warn(_('unexpected svn output:\n'))
                 self.ui.warn(output)
                 raise error.Abort(_('unable to cope with svn output'))
diff --git a/tests/test-convert-svn-sink.t b/tests/test-convert-svn-sink.t
--- a/tests/test-convert-svn-sink.t
+++ b/tests/test-convert-svn-sink.t
@@ -466,3 +466,46 @@ 
   msg: Add file a
    A /a
   $ rm -rf a a-hg a-hg-wc
+
+Skipping empty commits
+
+  $ hg init a
+
+  $ hg --cwd a --config ui.allowemptycommit=True ci -d '1 0' -m 'Initial empty commit'
+
+  $ echo a > a/a
+  $ hg --cwd a ci -d '0 0' -A -m 'Some change'
+  adding a
+  $ hg --cwd a --config ui.allowemptycommit=True ci -d '2 0' -m 'Empty commit 1'
+  $ hg --cwd a --config ui.allowemptycommit=True ci -d '3 0' -m 'Empty commit 2'
+  $ echo b > a/b
+  $ hg --cwd a ci -d '0 0' -A -m 'Another change'
+  adding b
+
+  $ hg convert -d svn a
+  assuming destination a-hg
+  initializing svn repository 'a-hg'
+  initializing svn working copy 'a-hg-wc'
+  scanning source...
+  sorting...
+  converting...
+  4 Initial empty commit
+  3 Some change
+  2 Empty commit 1
+  1 Empty commit 2
+  0 Another change
+
+  $ svnupanddisplay a-hg-wc 0
+   2 1 test a
+   2 2 test .
+   2 2 test b
+  revision: 2
+  author: test
+  msg: Another change
+   A /b
+  revision: 1
+  author: test
+  msg: Some change
+   A /a
+
+  $ rm -rf a a-hg a-hg-wc