[PATCH 2 of 2 V2] ignore: resolve ignore files relative to repo root (issue4473) (BC)

Augie Fackler raf at durin42.com
Mon Dec 22 15:25:48 CST 2014


On Wed, Dec 17, 2014 at 08:54:03PM -0800, Siddharth Agarwal wrote:
> # HG changeset patch
> # User Siddharth Agarwal <sid0 at fb.com>
> # Date 1418769293 28800
> #      Tue Dec 16 14:34:53 2014 -0800
> # Node ID 21f0589e8e2d656cc6024c53a2663a3cffc59421
> # Parent  a0103901de548b143d3764b27783b9c0acaba185
> ignore: resolve ignore files relative to repo root (issue4473) (BC)

I agree that this is the only sane thing to do. Queued.

>
> Previously these would be considered to be relative to the current working
> directory. That behavior is both undocumented and doesn't really make sense.
> There are two reasonable options for how to resolve relative paths:
> - relative to the repo root
> - relative to the config file
>
> Resolving these files relative to the repo root matches existing behavior with
> hooks. An earlier discussion about this is available at
> http://mercurial.markmail.org/thread/tvu7yhzsiywgkjzl.
>
> Thanks to Isaac Jurado <diptongo at gmail.com> for the initial patchset that
> spurred the discussion.
>
> diff --git a/mercurial/dirstate.py b/mercurial/dirstate.py
> --- a/mercurial/dirstate.py
> +++ b/mercurial/dirstate.py
> @@ -130,7 +130,9 @@
>          files = [self._join('.hgignore')]
>          for name, path in self._ui.configitems("ui"):
>              if name == 'ignore' or name.startswith('ignore.'):
> -                files.append(util.expandpath(path))
> +                # we need to use os.path.join here rather than self._join
> +                # because path is arbitrary and user-specified
> +                files.append(os.path.join(self._rootdir, util.expandpath(path)))
>          return ignore.ignore(self._root, files, self._ui.warn)
>
>      @propertycache
> diff --git a/mercurial/help/config.txt b/mercurial/help/config.txt
> --- a/mercurial/help/config.txt
> +++ b/mercurial/help/config.txt
> @@ -1338,11 +1338,11 @@
>
>  ``ignore``
>      A file to read per-user ignore patterns from. This file should be
> -    in the same format as a repository-wide .hgignore file. This
> -    option supports hook syntax, so if you want to specify multiple
> -    ignore files, you can do so by setting something like
> -    ``ignore.other = ~/.hgignore2``. For details of the ignore file
> -    format, see the ``hgignore(5)`` man page.
> +    in the same format as a repository-wide .hgignore file. Filenames
> +    are relative to the repository root. This option supports hook syntax,
> +    so if you want to specify multiple ignore files, you can do so by
> +    setting something like ``ignore.other = ~/.hgignore2``. For details
> +    of the ignore file format, see the ``hgignore(5)`` man page.
>
>  ``interactive``
>      Allow to prompt the user. True or False. Default is True.
> diff --git a/tests/test-hgignore.t b/tests/test-hgignore.t
> --- a/tests/test-hgignore.t
> +++ b/tests/test-hgignore.t
> @@ -80,13 +80,23 @@
>
>  empty out testhgignore
>    $ echo > .hg/testhgignore
> -  $ echo "glob:*.o" > .hgignore
> +
> +Test relative ignore path (issue4473):
> +
> +  $ cat >> $HGRCPATH << EOF
> +  > [ui]
> +  > ignore.relative = .hg/testhgignorerel
> +  > EOF
> +  $ echo "glob:*.o" > .hg/testhgignorerel
> +  $ cd dir
>    $ hg status
>    A dir/b.o
>    ? .hgignore
>    ? a.c
>    ? syntax
>
> +  $ cd ..
> +  $ echo > .hg/testhgignorerel
>    $ echo "syntax: glob" > .hgignore
>    $ echo "re:.*\.o" >> .hgignore
>    $ hg status
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel


More information about the Mercurial-devel mailing list