[PATCH 1 of 2] archive: drop the leading '.' path component from the prefix (issue4634)

Martin von Zweigbergk martinvonz at google.com
Thu May 7 16:29:02 CDT 2015


On Tue, May 5, 2015 at 8:55 PM Matt Harbison <mharbison72 at gmail.com> wrote:

> # HG changeset patch
> # User Matt Harbison <matt_harbison at yahoo.com>
> # Date 1430873558 14400
> #      Tue May 05 20:52:38 2015 -0400
> # Node ID 7d27fb197d23993b076d485f8ae5884ec2e5bcca
> # Parent  c5d4f9cc8da7bb2068457e96e4f74ff694514ced
> archive: drop the leading '.' path component from the prefix (issue4634)
>
> Unix utilities like tar will happily prefix the files it packs with './',
> but
> annoyingly, Windows Explorer will not show these packed files when it
> opens the
> archive.  Since there doesn't seem to be a point in including './' in the
> path
> names, just drop it.  The default 'hg archive' prefix is the basename of
> the
> archive, so specifying '.' allows for that default to be disabled
> completely.
>
> diff --git a/mercurial/archival.py b/mercurial/archival.py
> --- a/mercurial/archival.py
> +++ b/mercurial/archival.py
> @@ -37,6 +37,10 @@
>      prefix = util.pconvert(lpfx)
>      if not prefix.endswith('/'):
>          prefix += '/'
> +    # Drop the leading '.' path component if present, so Windows can read
> the
> +    # zip files (issue4634)
> +    if prefix.startswith('./'):
> +        prefix = prefix[2:]
>      if prefix.startswith('../') or os.path.isabs(lpfx) or '/../' in
> prefix:
>          raise util.Abort(_('archive prefix contains illegal components'))
>      return prefix
> diff --git a/tests/test-subrepo-deep-nested-change.t
> b/tests/test-subrepo-deep-nested-change.t
> --- a/tests/test-subrepo-deep-nested-change.t
> +++ b/tests/test-subrepo-deep-nested-change.t
> @@ -309,17 +309,17 @@
>
>  Exclude normal files from main and sub-sub repo
>
> -  $ hg --config extensions.largefiles= archive -S -X '**.txt'
> ../archive_lf.tgz
> +  $ hg --config extensions.largefiles= archive -S -X '**.txt' -p '.'
> ../archive_lf.tgz
>    $ tar -tzf ../archive_lf.tgz | sort
> -  archive_lf/.hgsub
> -  archive_lf/.hgsubstate
> -  archive_lf/large.bin
> -  archive_lf/main
> -  archive_lf/sub1/.hgsub
> -  archive_lf/sub1/.hgsubstate
> -  archive_lf/sub1/sub1
> -  archive_lf/sub1/sub2/large.bin
> -  archive_lf/sub1/sub2/sub2
> +  .hgsub
> +  .hgsubstate
> +  large.bin
> +  main
> +  sub1/.hgsub
> +  sub1/.hgsubstate
> +  sub1/sub1
> +  sub1/sub2/large.bin
> +  sub1/sub2/sub2
>
>  Include normal files from within a largefiles subrepo
>
> diff --git a/tests/test-subrepo-git.t b/tests/test-subrepo-git.t
> --- a/tests/test-subrepo-git.t
> +++ b/tests/test-subrepo-git.t
> @@ -325,13 +325,13 @@
>    ../archive_x/s
>    ../archive_x/s/g
>
> -  $ hg -R ../tc archive -S ../archive.tgz 2>/dev/null
> +  $ hg -R ../tc archive -S ../archive.tgz --prefix '.' 2>/dev/null
>    $ tar -tzf ../archive.tgz | sort
> -  archive/.hg_archival.txt
> -  archive/.hgsub
> -  archive/.hgsubstate
> -  archive/a
> -  archive/s/g
> +  .hg_archival.txt
> +  .hgsub
> +  .hgsubstate
> +  a
> +  s/g
>
>  create nested repo
>
> diff --git a/tests/test-subrepo-recursion.t
> b/tests/test-subrepo-recursion.t
> --- a/tests/test-subrepo-recursion.t
> +++ b/tests/test-subrepo-recursion.t
> @@ -312,7 +312,7 @@
>
>  Test archiving to zip file (unzip output is unstable):
>
> -  $ hg archive --subrepos ../archive.zip
> +  $ hg archive --subrepos --prefix '.' ../archive.zip
>    \r (no-eol) (esc)
>    archiving [                                           ] 0/3\r (no-eol)
> (esc)
>    archiving [                                           ] 0/3\r (no-eol)
> (esc)
> @@ -339,6 +339,20 @@
>    archiving (foo/bar) [================================>] 1/1\r (no-eol)
> (glob) (esc)
>    archiving (foo/bar) [================================>] 1/1\r (no-eol)
> (glob) (esc)
>                                                                \r (no-eol)
> (esc)
> +  $ unzip -l ../archive.zip
> +  Archive:  ../archive.zip
> +    Length      Date    Time    Name
> +  ---------  ---------- -----   ----
> +        172  01-01-1980 00:00   .hg_archival.txt
> +         10  01-01-1980 00:00   .hgsub
> +         45  01-01-1980 00:00   .hgsubstate
> +          3  01-01-1980 00:00   x.txt
> +         10  01-01-1980 00:00   foo/.hgsub
> +         45  01-01-1980 00:00   foo/.hgsubstate
> +          9  01-01-1980 00:00   foo/y.txt
> +          9  01-01-1980 00:00   foo/bar/z.txt
> +  ---------                     -------
> +        303                     8 files
>

The output format is apparently not very well defined:
http://hgbuildbot.kublai.com/builders/vfat%20hg%20tests/builds/510/steps/vfat/logs/stdio



>
>  Test archiving a revision that references a subrepo that is not yet
>  cloned:
> @@ -363,7 +377,7 @@
>
>    $ cd ../empty
>  #if hardlink
> -  $ hg archive --subrepos -r tip ../archive.tar.gz
> +  $ hg archive --subrepos -r tip --prefix './' ../archive.tar.gz
>    \r (no-eol) (esc)
>    archiving [                                           ] 0/3\r (no-eol)
> (esc)
>    archiving [                                           ] 0/3\r (no-eol)
> (esc)
> @@ -413,7 +427,7 @@
>  #else
>  Note there's a slight output glitch on non-hardlink systems: the last
>  "linking" progress topic never gets closed, leading to slight output
> corruption on that platform.
> -  $ hg archive --subrepos -r tip ../archive.tar.gz
> +  $ hg archive --subrepos -r tip --prefix './' ../archive.tar.gz
>    \r (no-eol) (esc)
>    archiving [                                           ] 0/3\r (no-eol)
> (esc)
>    archiving [                                           ] 0/3\r (no-eol)
> (esc)
> @@ -437,14 +451,14 @@
>  Archive + subrepos uses '/' for all component separators
>
>    $ tar -tzf ../archive.tar.gz | sort
> -  archive/.hg_archival.txt
> -  archive/.hgsub
> -  archive/.hgsubstate
> -  archive/foo/.hgsub
> -  archive/foo/.hgsubstate
> -  archive/foo/bar/z.txt
> -  archive/foo/y.txt
> -  archive/x.txt
> +  .hg_archival.txt
> +  .hgsub
> +  .hgsubstate
> +  foo/.hgsub
> +  foo/.hgsubstate
> +  foo/bar/z.txt
> +  foo/y.txt
> +  x.txt
>
>  The newly cloned subrepos contain no working copy:
>
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://selenic.com/pipermail/mercurial-devel/attachments/20150507/79760ce6/attachment.html>


More information about the Mercurial-devel mailing list