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.
Automatische Lazarus-installation: Installationsassistent
- corpsman
- Lazarusforum e. V.
- Beiträge: 1617
- 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
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
, 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" ?
Unten seht ihr das was ich aus dem Skript gemacht habe (alles SVN zeug auskommentiert) und git pull eingefügt

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
Just try it
-
- Beiträge: 2118
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Automatische Lazarus-installation: Installationsassistent
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:
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
- corpsman
- Lazarusforum e. V.
- Beiträge: 1617
- 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
Ersetzen will ich ja folgende Zeilen:
-> damit brauche ich dann nur die Zeile Copy Pasten wenn der Build mal fehl schlägt.
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
Das heißt ich brauch schon den Langen Hash.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
Zeigt mir schon mal in der Konsole, den Wert den ich mittels am Ende rein Schreibeif [ -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"
-> 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
Just try it
-
- Beiträge: 2118
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Automatische Lazarus-installation: Installationsassistent
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):
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
- corpsman
- Lazarusforum e. V.
- Beiträge: 1617
- 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
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
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
Just try it