2016-04-06 15 views
0

Ich suche Commits zu meinem lokalen Windows-Mercurial Repo zu verhindern, wenn die folgende Zeichenfolge in allen ungebundenen Dateien ist:Wie verhindert man Mercurial Commits mit String unter Windows?

ME

Ich weiß nicht, COMMIT, dass die Pre-commit hook I need ist pretxncommit. Wenn ich auf Linux wäre, würde ich nur so etwas tun:

[hooks] 
pretxncommit.donotcommitme = hg export tip | (! grep -E -q -i 'do not commit me') 

(Entnommen this link aber nicht überprüft/geprüft)

Als Ersatz für egrep habe ich FINDSTR /I /C:"do not commit" bekam, was zu funktionieren scheint fein. Allerdings kann ich nichts finden, was seine Ergebnisse wie im obigen Linux-Beispiel "negiert".

Als eine mögliche Alternative zu reinen Eingabeaufforderung Befehle habe ich auch über this PowerShell script, die für große Binärdateien überprüft. Aber ich kenne Powershell nicht, also sieht diese ganze Sache Kauderwelsch aus.

Kennt jemand eine einfache Möglichkeit zu tun, was ich ohne Python, Cygwin oder etwas anderes zu tun bin? Oder wissen Sie, wie Sie das obige PowerShell-Skript anpassen können, um die Zeichenfolgenprüfung anstelle der Dateigrößenprüfung durchzuführen?

Wir verwenden auch TortoiseHG, also kann jede Lösung anstelle von reinem Mercurial auch verwenden.

Antwort

0

Es stellte sich heraus, dass der PowerShell-Teil einfacher war, als ich erwartet hatte. Am Ende schrieb ich mein eigenes einfaches Skript basierend auf this gist.

Hier ist es für alle, die intersted:

# This is like an "include" needed for the MessageBox 
Add-Type -AssemblyName System.Windows.Forms 

function Show-MessageBox() 
{ 
    $message = "Found a ""DO NOT COMMIT ME"" message in your code!`r`n`r`nIf you are doing a pull or rebase this is probably okay.`r`n`r`nCommit anyway?" 
    $title = "DO NOT COMMIT ME DETECTED!" 
    $buttons = [System.Windows.Forms.MessageBoxButtons]::YesNo 
    $icon = [System.Windows.Forms.MessageBoxIcon]::Warning 

    [System.Windows.Forms.MessageBox]::Show($message, $title, $buttons, $icon) 
} 

# Use `hg export` to search for the string "do not commit me" (case insensitive) 
write "Checking for DO NOT COMMIT ME comments in your code..." 
$whoops = (hg export tip | Select-String -pattern "do not commit me"); 

# If we have it in our changeset, abort the commit! 
if ($whoops) 
{ 
    $a = Show-MessageBox 

    if ($a -eq "Yes") 
    { 
     write "`r`n!!! COMMITING ANYWAY !!!`r`n" 
     exit 0 
    } 

    write "`r`n*** ABORTING COMMIT! ***`r`n" 
    exit 1 
} 

write "Okay to commit!" 
exit 0 

HINWEIS: Ich musste auch auf die Fähigkeit drehen Powershell-Skripts mit Set-ExecutionPolicy RemoteSigned (beim Laufen Powershell als Administrator) ausgeführt werden. Die Befehlszeile -ExecutionPolicy Bypass Flag funktionierte NICHT richtig und verursachte alle möglichen Probleme in TortoiseHG!