Ich habe einen regulären Python-Ausdruck, der mit einer Reihe von Dateinamen übereinstimmt. Wie kann ich es ändern, damit ich es in Mercurials .hgignore-Datei verwenden kann, um Dateien zu ignorieren, die nicht entsprechen den Ausdruck?Wie wird der Sprachenkomplement-Operator in .hgignore emuliert?
Ganzer Geschichte: Ich habe einen großen Quellbaum mit *.ml
Dateien überall verstreut. Ich möchte sie in ein neues Repository legen. Es gibt andere, weniger wichtige Dateien, die zu schwer sind, um in das Repository aufgenommen zu werden. Ich versuche den entsprechenden Ausdruck für .hgignore
Datei zu finden.
1. Beobachtung: Python hat keinen regulären Sprachkomplement-Operator (AFAIK kann nur eine Menge von Zeichen ergänzen). (BTW, warum?)
2. Beobachtung: Die folgende Regex in Python:
re.compile("^.*(?<!\.ml)$")
funktioniert wie erwartet:
abcabc - match
abc.ml - no match
x/abcabc - match
x/abc.ml - no match
Allerdings, wenn ich lege genau den gleichen Ausdruck in den .hgignore
Datei, bekomme ich diese:
$ hg st --all
? abc.ml
I .hgignore
I abcabc
I x/xabc
I x/xabc.ml
Nach .hgignore
Manpage verwendet Mercurial nur normale reguläre Python-Ausdrücke. Wie kommt es, dass ich dann andere Ergebnisse bekomme? Wie ist es möglich, dass Mercurial eine Übereinstimmung für die x/xabc.ml
gefunden hat?
Kennt jemand weniger hässlichen Weg um den Mangel an regulären Sprache Komplement-Operator?
Sie sollten gehen und diesen Fehlerbericht abonnieren: http://mercurial.selenic.com/bts/issue712 –