Ignore files in Mercurial using Glob syntax
Asked Answered
T

3

11

I'm using Mercurial and I have a following structure:

files
   test
       demo.jpg
       video.flv
       video.doc

   sport
       demo2.jpg
       picture.jpg
       text.txt
demo3.jpg
demofile3.doc

I want to make a glob filter that only ignore all "jpg" files in all directory that are children of "files" directory

I tried with files/*.jpg but it doesn't work.

Any advice would be appreciated.

Truant answered 22/7, 2010 at 7:36 Comment(0)
T
16

Regexp solution


This works for me ..

syntax: regexp
files/.*/.*jpg


Your own solution looks more like a glob. The trick with that is to use the ** syntax to allow for sub directories. See this ...

Glob solution


This glob works for me too

**/files/**/*.jpg


Comments

Personally I'd always go with the glob syntx for this kind of problem. Once you know about the ** syntax, it's easier than a regexp to follow what the pattern is trying to do.

Thibodeau answered 22/7, 2010 at 7:52 Comment(3)
Thanks for the replay but I have one more thing. When I use regexp it ignore the files in other directory that start or has word files in they names. But i want that regexp match only folder files. How can I do that?Truant
@Danillo. I'll take a look and get back to you asap.Thibodeau
@Daniilo, I've tried reproducing your scenario but it seems to work for me ... touch files/test/demo.jpg touch anfiles/test/files.doc >hg stat ? anfiles/test/files.docThibodeau
W
12

If you are happy to ignore "all JPG files inside any directory named files", then use

syntax: glob
files/**.jpg

See hg help patterns which explains that ** is a glob operator that spans directory separators. This means that the file

 files/test/demo.jpg

is matched by files/**.jpg.

However, note that glob patterns are not rooted. This means that a file named

 test/files/demo.jpg

will also be ignored since it matches the pattern after you remove the test/ prefix.

You need to use a regular expression if you are concerned with this. In that syntax, the pattern reads

syntax: regex
^files/.*\.jpg

I would normally not worry about rooting the pattern -- I prefer the simplicity of the glob patterns. But it's nice to know that you can root a ignore pattern if you really have to.

Wildebeest answered 22/7, 2010 at 13:26 Comment(0)
D
0

Does it have to be glob syntax? If you use regex syntax, files/.*\.jpg should work.

Doubleton answered 22/7, 2010 at 7:40 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.