2011-01-14 14 views
3

Hier ist das Problem: Ich möchte Subversion für die Revisionsnummer eines Repositorys abfragen und dann ein neues Verzeichnis mit der Revisionsnummer im Namen erstellen (z. B. "Build763 ").Extrahieren eines bestimmten Werts aus der Befehlszeilenausgabe mit Powershell

Der Befehl "svn info" gibt eine Anzahl von Label \ Wert-Paaren aus, die durch Doppelpunkte getrennt sind. Zum Beispiel

Path: c# 
URL: file:///%5Copdy-doo/Archive%20(H)/Development/CodeRepositories/datmedia/Development/c%23 
Repository UUID: b1d03fca-1949-a747-a1a0-046c2429f46a 
Revision: 58 
Last Changed Rev: 58 
Last Changed Date: 2011-01-12 11:36:12 +1000 (Wed, 12 Jan 2011) 

Hier ist mein aktueller Code, der das Problem löst. Gibt es eine Möglichkeit, dies mit weniger Code zu tun? Ich denke, mit der Verwendung von Rohrleitungen könnte man das mit ein oder zwei Zeilen machen. Ich sollte sicherlich keine temporäre Datei verwenden müssen.

$RepositoryRoot = "file:///%5Cdat-ftp/Archive%20(H)/Development/CodeRepositories/datmedia" 
$BuildBase="/Development/c%23" 
$RepositoryPath=$RepositoryRoot + $BuildBase 

# Outputing the info into a file 
svn info $RepositoryPath | Out-File -FilePath svn_info.txt 

$regex = [regex] '^Revision: (\d{1,4})' 

foreach($info_line in get-content "svn_info.txt") 
    { 
     $match = $regex.Match($info_line); 
     if($match.Success) 
     { 
      $revisionNumber = $match.Groups[1]; 
      break; 
     } 
    } 


"Revision number = " + $revisionNumber; 

Antwort

3

Hier ist eine Art und Weise:

$revisionNumber = svn info $RepositoryPath | 
    select-string "^revision" | 
     foreach {$_.line.split(":")[1].trim()} 

    if ($revisionNumber){"Revision number = " + $revisionNumber 

} 
2

mjolinor Vorschlag machen, werde ich endlich mit:

$revisionNumber = (svn info $RepositoryPath | select-string '^Revision: (\d+)$').Matches[0].Groups[1].Value 

Cool! Eine Codezeile. (Es dauerte zwei Stunden zu schreiben, aber hey)

+1

Sie Sie dafür machen graben Capture, nicht wahr? – mjolinor

+1

Nun, Sie könnten einfach '(svn info $ RepositoryPath) -Replace '^ Revision: (\ d +) $', '$ 1'', um die Erfassung zu bekommen;) – Jaykul

+0

Das ist besser. Ich muss mich daran erinnern. – mjolinor

0

verwenden könnte Wenn Sie erstellen und verwenden können Arbeitskopie von URL (WC), können Sie

  • svnversion WC: Wille Ausgang sauber Anzahl der WC-Revision

    > svnversion trunk

    34

  • Mit SubWCRrev convert Template-Datei mit SubWCRrev-keywords in Fledermaus-Datei (subwcrev WC tpl-file bat-file) mit RevNo, in gewünschter Stelle ersetzt (innen mkdir Optionen) und Aufruf zur Folge bittet für die Operation durchführen
Verwandte Themen