开发者

Regex for all files except .hg_keep

开发者 https://www.devze.com 2023-01-27 06:19 出处:网络
I use empty .hg_keep files to keep some (otherwise empty) folders in Mercurial. The problem is that I can\'t find a working regex which excludes everything but the .hg_keep files.

I use empty .hg_keep files to keep some (otherwise empty) folders in Mercurial.

The problem is that I can't find a working regex which excludes everything but the .hg_keep files.

lets say we have this filestructure:

a/b/c2/.hg_keep
a/b/c/d/.hg_keep
a/b/c/d/file1
a/b/c/d2/.hg_keep
a/b/.hg_keep
a/b/file2
a/b/file1
a/.hg_keep
a/file2
a/file1

and I want to keep only the .hg_keep files under a/b/.

with the help of http://gskinner.com/RegExr/ I created the following .hgignore:

syntax: regexp
.*b.*/(?!.*\.hg_keep)

but Mercurial ignores all .hg_keep files in subfolders o开发者_运维知识库f b.

# hg status
? .hgignore
? a/.hg_keep
? a/b/.hg_keep
? a/file1
? a/file

# hg status -i
I a/b/c/d/.hg_keep
I a/b/c/d/file1
I a/b/c/d2/.hg_keep
I a/b/c2/.hg_keep
I a/b/file1
I a/b/file2

I know that I a can hd add all the .hg_keep files, but is there a solution with a regular expression (or glob)?


Regexp negation might work for this. If you want to ignore everything except the a/b/.hg_keep file, you can probably use:

^(?!a/b/\.hg_keep)$

The parts of this regexp that matter are:

^                   anchor the match to the beginning of the file path
(?!  ... )          negation of the expression between '!' and ')'
a/b/\.hg_keep       the full path of the file you want to match
$                   anchor the match to the end of the file path

The regular expression

^a/b/\.hg_keep$

would match only the file called a/b/.hg_keep.

Its negation

^(?!a/b/\.hg_keep)$

will match everything else.


Not quite sure in what context you are using the Regex but this should be it, this matches all lines ending in .hg_keep:

^.*\.hg_keep$

EDIT: And here is a Regex to match items not matching the above expression:

^(?:(?!.*\.hg_keep).)*$


Try (?!.*/\.hg_keep$).


Looking for something similiar to this. Found an answer, but it's not what we want to hear.

  1. Limitations

There is no straightforward way to ignore all but a set of files. Attempting to use an inverted regex match will fail when combined with other patterns. This is an intentional limitation, as alternate formats were all considered far too likely to confuse users to be worth the additional flexibility.

Ref: https://www.mercurial-scm.org/wiki/.hgignore

0

精彩评论

暂无评论...
验证码 换一张
取 消