Automatische Lazarus-installation: Installationsassistent

Für Installationen unter Linux-Systemen
Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1496
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Automatische Lazarus-installation: Installationsassistent

Beitrag von corpsman »

Hab das Skript gerade bei mir getestet, es funktioniert wunderbar.

Und wir haben mal wieder bewiesen, dass Teamwork wunderbar funktioniert *g*

Danke an alle Beteiligten.
--
Just try it

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1496
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Automatische Lazarus-installation: Installationsassistent

Beitrag von corpsman »

Sodale, Nachdem Lazarus ja nun auf Git umgestiegen ist, musste ich diesen alten Thread wieder raus kramen und hoffe dass ihr mir "helfen" könnt.

Unten seht ihr das was ich aus dem Skript gemacht habe (alles SVN zeug auskommentiert) und git pull eingefügt 8), Die Update to revision geschichte habe ich aus auskommentiert (war für mich nur sehr selten wichtig). Der Teil in dem aber die letzte funktionierende Version geplottet/ gespeichert wird wäre mir schon wichtig. Bei GIT heißt das ja nun "Hash".

Ist hier jemand mit den ausreichenden Fähigkeiten um dieses Feature wieder zu "Aktivieren" ?

Code: Alles auswählen

    #bin/sh
        echo "This script downloads the newest GIT revision and recompiles the IDE"
        # Type here the Path where your lazarus is located to.
        LAZPATH=$HOME"/lazarus/"
     
        STRIPCMD="/usr/bin/strip --strip-all "
        SVNPROTOFILE="gitprotocol.txt"
        BUILDPROTOFILE="buildprotocol.txt"
        FULL=false
        STRIP=true
        ALWAYSBUILD=false
        REVISIONID=""
        REVISIONID2="" 
     
        CheckError() {
        if [ ! $? == 0 ];
       then
        echo "Exiting"
        exit;
       fi
        } 
     
        while getopts ":fna:p:?" optname
          do
            case "$optname" in
              "f")
                FULL=true
                ;;
              "n")
                STRIP=false
                ;;
              "p")
                LAZPATH=$OPTARG
                ;;
              "a")
                ALWAYSBUILD=true
                ;;
#              "s")            
#                REVISIONID2=$OPTARG
#                echo "Update to Revision : "$REVISIONID2             
#                REVISIONID=" -r "
#                ;;
              "?")
                echo -e "Usage:\n -s<Number>: Revision number to compile to\n -p<Path>  : Path to Lazarus\n -f        : Full make\n -n        : Do not strip\n -a        : Always build"
                exit
                ;;
              ":")
                echo "No argument value for option $OPTARG"
                exit
                ;;
              *)
              # Should not occur
                echo "Unknown error while processing options"
                exit
                ;;
            esac
          done
     
     
        # Switch to lazarus path
        echo "CD to ".$LAZPATH
        cd $LAZPATH
     
        # clean old files and rewrite BUILDPROTOFILE
        echo "Clean everything"
        make clean > $BUILDPROTOFILE
        CheckError

        # make the svn update and rewrite SVNPROTOFILE
     
#        if [ -f $SVNPROTOFILE ]; then
#          # mittels String Operatoren die Aktuelle Versionsnummer Extrahieren
#          LASTLINE=`tail -1 $SVNPROTOFILE`      
#          len=${#LASTLINE}
#          echo "Update from old SVN-Revision : "  ${LASTLINE:len-7:7}
#        else
#          echo "Update from SVN"
#        fi
     
        #echo "svn update"$REVISIONID$REVISIONID2" > "$SVNPROTOFILE
#        svn update $REVISIONID$REVISIONID2 > $SVNPROTOFILE
        git pull
        CheckError
     
#        counter=$(wc -l < $SVNPROTOFILE) 
#        LASTLINE=`tail -1 $SVNPROTOFILE`
#        if [ $counter == 1 ]; then
#         echo "Your version is up to date "$LASTLINE
#         if [ $ALWAYSBUILD == false ]; then
#           exit
#         fi
#        else 
#         echo $LASTLINE
#        fi        
     
        # Compile the tools 
        echo "Compile the tools"
     
        if [ $FULL == true ]; then
         echo "Full"
         make lazbuild lcl ideintf components tools starter >> $BUILDPROTOFILE         
         CheckError
         if [ $STRIP == true ]; then
          echo "Strip starter lazbuild tools"
          $STRIPCMD"$LAZPATH"startlazarus
          $STRIPCMD"$LAZPATH"lazbuild
          $STRIPCMD"$LAZPATH"tools/lazres
          $STRIPCMD"$LAZPATH"tools/lrstolfm
          $STRIPCMD"$LAZPATH"tools/svn2revisioninc
          $STRIPCMD"$LAZPATH"tools/updatepofiles
         fi
        else
         echo "Partial"
         #make lazbuild lcl ideintf components >> $BUILDPROTOFILE
         make lazbuild >> $BUILDPROTOFILE
         CheckError
         if [ $STRIP == true ]; then
          echo "Strip lazbuild"
          $STRIPCMD"$LAZPATH"lazbuild
         fi
        fi
     
        # Compile the IDE with all packages ( Myprofile )
        echo "Compile the IDE"
        EXECCOMMAND="lazbuild --build-ide= --build-mode="
        "$LAZPATH"$EXECCOMMAND  >> $BUILDPROTOFILE
        CheckError
        if [ $STRIP == true ]; then
        echo "Strip lazarus"
         $STRIPCMD"$LAZPATH"lazarus 
        fi
     
        echo "Finished."
--
Just try it

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Automatische Lazarus-installation: Installationsassistent

Beitrag von Warf »

Ich weiß nicht ganz genau was du machen willst, aber den aktuellen commit von git bekommst du via "git log -n 1 --format=format:%H"
bzw wenn dir der kleine hash schon reicht: "git log -n 1 --format=format:%h"

Wenn du auf einen bestimmten commit mit git updaten willst:

Code: Alles auswählen

$> git fetch # neue commits runterladen
$> git checkout COMMITHASH # commit auschecken

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1496
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Automatische Lazarus-installation: Installationsassistent

Beitrag von corpsman »

Ersetzen will ich ja folgende Zeilen:
if [ -f $SVNPROTOFILE ]; then
# mittels String Operatoren die Aktuelle Versionsnummer Extrahieren
LASTLINE=`tail -1 $SVNPROTOFILE`
len=${#LASTLINE}
echo "Update from old SVN-Revision : " ${LASTLINE:len-7:7}
else
echo "Update from SVN"
fi
#echo "svn update"$REVISIONID$REVISIONID2" > "$SVNPROTOFILE
svn update $REVISIONID$REVISIONID2 > $SVNPROTOFILE
Das heißt ich brauch schon den Langen Hash.
if [ -f $SVNPROTOFILE ]; then
# mittels String Operatoren die Aktuelle Versionsnummer Extrahieren
LASTLINE=`tail -1 $SVNPROTOFILE`
echo "Update from old GIT-Revision : " $LASTLINE
else
echo "Update from GIT"
fi
#echo "git checkout LASTLINE"
Zeigt mir schon mal in der Konsole, den Wert den ich mittels am Ende rein Schreibe
-> damit brauche ich dann nur die Zeile Copy Pasten wenn der Build mal fehl schlägt.
git log -n 1 --format=format:%H > $SVNPROTOFILE

Git fetch lädt doch nur runter aber aktualisiert die Dateien doch nicht, oder ?

deswegen mache ich git pull.

Damit fehlt mir nur noch der Teil, wo das "ergebnis" von Git Pull ausgewertet wird und das Skript abgebrochen wird, weil Aktuell
# make the svn update and rewrite SVNPROTOFILE

if [ -f $SVNPROTOFILE ]; then
# mittels String Operatoren die Aktuelle Versionsnummer Extrahieren
LASTLINE=`tail -1 $SVNPROTOFILE`
echo "Update from old GIT-Revision : " $LASTLINE
else
echo "Update from GIT"
fi

#echo "git checkout LASTLINE"
git pull

CheckError

# counter=$(wc -l < $SVNPROTOFILE)
# LASTLINE=`tail -1 $SVNPROTOFILE`
# if [ $counter == 1 ]; then
# echo "Your version is up to date "$LASTLINE
# if [ $ALWAYSBUILD == false ]; then
# exit
# fi
# else
# echo $LASTLINE
# fi
--
Just try it

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Automatische Lazarus-installation: Installationsassistent

Beitrag von Warf »

Ein pull bei git ist nur ein shortcut für einen fetch und einen merge gegen die neuste version. Je nachdem was du machen willst ist das korrekt, z.b. wenn du auf die neuste version updaten willst.
Wenn du auf eine bestimmte version (commit) upgraden willst musst du das manuell machen, z.b. mit einem git fetch zum runterladen und dann einen git checkout COMMIT oder einen git merge COMMIT wobei COMMIT dann die commit nummer ist auf die du upgraden willst (für downgrades übrigens nur checkout nicht merge).

Um zu checken ob du tatsächlich was geupgraded hast kannst du einfach vor dem pull/merge die commitnummer auslesen, und danach, und einfach vergleichen (ungetestet):

Code: Alles auswählen

CURRENT_COMMIT=$(git log -n 1 --format=format:%H) # Aktueller commit
CURRENT_BRANCH=$(git branch --show-current) # Aktueller branch
UPDATE_TARGET=${UPDATE_TARGET:-"origin/${CURRENT_BRANCH"}} # Falls nicht explizit ein commit als upgrade ziel angegeben wurde, upgrade auf den neusten commit des branches
git fetch
# Testen ob es ein down oder ein upgrade ist
if git merge-base --is-ancestor $CURRENT_COMMIT $UPDATE_TARGET; then
  # Bei einem upgrade benutz merge
  git merge $UPDATE_TARGET
else
  # Bei einem downgrade checkout
  git checkout $UPDATE_TARGET
fi
# Teste ob sich der Commithash geändert hat
NEW_COMMIT=$(git log -n 1 --format=format:%H)
if [[ "$NEW_COMMIT" == "$CURRENT_COMMIT" ]]; then
  echo "Already at newest version"
  exit 0
else
  # Upgrade dokumentieren
  echo "Updated from $CURRENT_COMMIT to $NEW_COMMIT"
fi

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1496
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Automatische Lazarus-installation: Installationsassistent

Beitrag von corpsman »

Sodale, danke für deine Hilfe, nun schaut mein Skript so aus und kann alles was ich brauche

1. Reguläres Update der Lazarus Quellen und neu compilieren (bei Bedarf)
2. Plotten eines Komentares zum "Zurückrollen" sollte der Compile fehl schlagen ;)

Code: Alles auswählen

    #bin/sh
        echo "This script downloads the newest GIT revision and recompiles the IDE"
        # Type here the Path where your lazarus is located to.
        LAZPATH=$HOME"/lazarus/"
     
        STRIPCMD="/usr/bin/strip --strip-all "
        SVNPROTOFILE="gitprotocol.txt"
        BUILDPROTOFILE="buildprotocol.txt"
        FULL=false
        STRIP=true
        ALWAYSBUILD=false
        REVISIONID=""
        REVISIONID2="" 
     
        CheckError() {
        if [ ! $? == 0 ];
       then
        echo "Exiting"
        exit;
       fi
        } 
     
        while getopts ":fna:p:?" optname
          do
            case "$optname" in
              "f")
                FULL=true
                ;;
              "n")
                STRIP=false
                ;;
              "p")
                LAZPATH=$OPTARG
                ;;
              "a")
                ALWAYSBUILD=true
                ;;
#              "s")            
#                REVISIONID2=$OPTARG
#                echo "Update to Revision : "$REVISIONID2             
#                REVISIONID=" -r "
#                ;;
              "?")
                echo -e "Usage:\n -s<Number>: Revision number to compile to\n -p<Path>  : Path to Lazarus\n -f        : Full make\n -n        : Do not strip\n -a        : Always build"
                exit
                ;;
              ":")
                echo "No argument value for option $OPTARG"
                exit
                ;;
              *)
              # Should not occur
                echo "Unknown error while processing options"
                exit
                ;;
            esac
          done
     
     
        # Switch to lazarus path
        echo "CD to ".$LAZPATH
        cd $LAZPATH
     
        # clean old files and rewrite BUILDPROTOFILE
        echo "Clean everything"
        make clean > $BUILDPROTOFILE
        CheckError

        CURRENT_COMMIT=$(git log -n 1 --format=format:%H) # Aktueller commit
        git pull
        # Teste ob sich der Commithash geändert hat
        NEW_COMMIT=$(git log -n 1 --format=format:%H)
        if [[ "$NEW_COMMIT" == "$CURRENT_COMMIT" ]]; then
#          echo "Already at newest version" -- Der Kommentar wird dann schon von git pull geschrieben ;)
          exit 0
        else
          # Upgrade dokumentieren
          echo "Updated from $CURRENT_COMMIT to $NEW_COMMIT"
          echo "to switch back use command:"
          echo "git checkout $CURRENT_COMMIT"
        fi    
        CheckError    
     
        # Compile the tools 
        echo "Compile the tools"
     
        if [ $FULL == true ]; then
         echo "Full"
         make lazbuild lcl ideintf components tools starter >> $BUILDPROTOFILE         
         CheckError
         if [ $STRIP == true ]; then
          echo "Strip starter lazbuild tools"
          $STRIPCMD"$LAZPATH"startlazarus
          $STRIPCMD"$LAZPATH"lazbuild
          $STRIPCMD"$LAZPATH"tools/lazres
          $STRIPCMD"$LAZPATH"tools/lrstolfm
          $STRIPCMD"$LAZPATH"tools/svn2revisioninc
          $STRIPCMD"$LAZPATH"tools/updatepofiles
         fi
        else
         echo "Partial"
         #make lazbuild lcl ideintf components >> $BUILDPROTOFILE
         make lazbuild >> $BUILDPROTOFILE
         CheckError
         if [ $STRIP == true ]; then
          echo "Strip lazbuild"
          $STRIPCMD"$LAZPATH"lazbuild
         fi
        fi
     
        # Compile the IDE with all packages ( Myprofile )
        echo "Compile the IDE"
        EXECCOMMAND="lazbuild --build-ide= --build-mode="
        "$LAZPATH"$EXECCOMMAND  >> $BUILDPROTOFILE
        CheckError
        if [ $STRIP == true ]; then
        echo "Strip lazarus"
         $STRIPCMD"$LAZPATH"lazarus 
        fi

        git log -n 1 --format=format:%H > $SVNPROTOFILE
        echo "Finished."
--
Just try it

Antworten