hmm: Groovy Shell Command geht nicht

Hi Leute,

ich hab im Jenkins ein Groovy Script geschrieben, dass mit folgendem Befehl das Keyword Author in ein SVN Dokument schreibt. Das funktioniert!

def setKeywords = "svn propset svn:keywords Author  " + System.getenv("SVN_BRANCH") + "/" +  System.getenv("SVN_BRANCH_PFAD") + "/CommitOrdner/" + ordner + "/" + file

def proc2 = (setKeywords).execute()

Möchte ich nun aber zwei Keywörter (Author und Date) ins SVN Dokument schreiben, hält Groovy Date" für eine Pfadangabe zu einem File:

def setKeywords = "svn propset svn:keywords \"Author Date\" " + System.getenv("SVN_BRANCH") + '/' + System.getenv("SVN_BRANCH_PFAD") + "/CommitOrdner/" + ordner + "/" + file

def proc2 = (setKeywords).execute()

Der Befehl svn propset svn:keywords "Author Datei" pfadZurDatei funktioniert auf localhost in der console.

Könnt ihr mir helfen?

mfg hmm

  1. Tach,

    def setKeywords = "svn propset svn:keywords \"Author Date\" " + System.getenv("SVN_BRANCH") + '/' + System.getenv("SVN_BRANCH_PFAD") + "/CommitOrdner/" + ordner + "/" + file
    
    def proc2 = (setKeywords).execute()
    

    Groovy führt bei String.execute() keine Shell aus, die für die Interpretation der Anführungszeichen (nämlich als: dieser String ist ein nicht mehrere Parameter) normalerweise zuständig wäre. Wenn du das brauchst, musst du entweder selber die Shell ausführen und dieser als Parameter übergeben, was du eigentlich ausführen willst (Kontextwechsel beachten!) oder es selber ausführen, z.B. auf Grundlage der Klasse ProcessBuilder: http://www.joergm.com/2010/09/executing-shell-commands-in-groovy/

    mfg
    Woodfighter

    1. hallo, danke!

      ich will das so bauen, dass es auf Linux und Windows läuft. d.h. ich nehme besser die variante mit definiertem Parameter?

      hast du irgendwo eine Erklärung wie man so einen Parameter setzt? beim googlen habe ich nur Sachen mit "listen" gefunden:

       def setKeywords = ["svn","propset","svn:keywords","\"Author Date\"",System.getenv("SVN_BRANCH"),"/",System.getenv("SVN_BRANCH_PFAD"),"/CommitOrdner/",ordner,"/",file]
              def proc2 = (setKeywords).execute()
      

      Das funktioniert aber nicht

      1. Mein erster versuch mit Parameter geht auch nicht:

        def param = "Author Date"
        def setKeywords = "svn propset svn:keywords ${param} " + System.getenv("SVN_BRANCH") + "/" + System.getenv("SVN_BRANCH_PFAD") + "/CommitOrdner/" + ordner + "/" + file
           
        def proc2 = (setKeywords).execute()
        
      2. Tach,

        hast du irgendwo eine Erklärung wie man so einen Parameter setzt? beim googlen habe ich nur Sachen mit "listen" gefunden:

        stimmt, die Listenvariante gibts auch noch.

         def setKeywords = ["svn","propset","svn:keywords","\"Author Date\"",System.getenv("SVN_BRANCH"),"/",System.getenv("SVN_BRANCH_PFAD"),"/CommitOrdner/",ordner,"/",file]
                def proc2 = (setKeywords).execute()
        

        Das funktioniert aber nicht

        Das ist keine sinnvolle Fehlermeldung; es wundert mich aber auch nicht, dass es nicht geht, immerhin gibst du hier fünf Parameter statt einen für den Dateinamen an und übergibst dem SVN wieder Anführungszeichen im Parameter, der die Keywords enthält. Deine Liste muss, um deinem Beispiel aus dem OP zu entsprechen, genau 5 Elemente enthalten:

        ["svn", "propset", "svn:keywords", "keyword1 keyword2", "Pfad"]
        

        mfg
        Woodfighter

        1. jo, danke. das hat jetzt geklappt!

          mfg hmm