1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214
|
% !TEX root = BuildWithGBP.nw
\part{Weitere Bestandteile des Skriptes}
\chapter{Weitere Aufgaben}
\section{Neuen Branch erstellen}
\label{sec:NeuenBranchErstellen}
<<CreateNewBranch>>=
function CreateNewBranch {
# Called by TaskSelect
# Creates a new branch (for backports or proposed-updates)
DebianBranches
whiptail --title "Recent branches" \
--msgbox "Recent branches:\n${bl}" 15 60
bName=""
bName=$(whiptail --inputbox "Name of the new branch:" \
--cancel-button "Cancel" 15 60 3>&2 2>&1 1>&3)
if [ ${bName} != "" ]
then
## Create new branch in git
git checkout -b ${bName}
## Change config file - make new branch to recent one
ChangeEntry
whiptail --title "New branch was created" \
--msgbox "New branch ${bName} was created" 15 60
echo "New branch ${bName} was created" >> ${log}
Distro4Branch
fi
}
<<ParseConfig>>
@
Nun wird wieder die Aufgabenauswahl aufgerufen (Kapitel~\ref{sec:Aufgabenauswahl},
Seite~\pageref{sec:Aufgabenauswahl}).
\section{Eingabe des Namens oder der IP eines eigenen Git-Servers}
\label{sec:NameEigenerGitServer}
Mit dieser Funktion, die von der Aufgabenauswahl (Kapitel~\ref{sec:Aufgabenauswahl},
Seite~\pageref{sec:Aufgabenauswahl}) aufgerufen werden kann, werden der
Name oder die IP eines eigenen \texttt{Git}-Servers in die Konfigurationsdatei
eingetragen. Die Eingabe eines Namens setzt eine funktionierende
Namensauflösung voraus.
<<OwnServer>>=
function OwnServer {
# Called by TaskSelect
# Set name or IP of own git server
ServerName=$(whiptail --inputbox "Name or IP-address of your git server:" \
--cancel-button "Cancel" 15 60 3>&2 2>&1 1>&3)
if [ -z "${ServerName}" ]
then
echo "Name or IP of your git server:"
read ServerName
fi
if [ -n "$ServerName" ]
then
# ReplaceConfigLines needs two parameters:
# name of the variable and new value
ReplaceConfigLines 'ServerName' ${ServerName}
AddGitServer
fi
}
<<Ask4DebDiff>>
@
Das Programmskript ruft die Funktion \textit{ReplaceConfigLines}
(Kapitel~\ref{sec:ChangeConfigFile},
Seite~\pageref{sec:ChangeConfigFile}) auf, um den \texttt{Git}-Server in
die Konfigurationdatei einzutragen. Außerdem wird die Funktion
\textit{AddGitServer} aufgerufen.
\section{AddGitServer}
Die Funktion \textit{AddGitServer} zeigt eine Liste der bisherigen
Remote-Server an und fragt, ob der eigene \texttt{Git}-Server hinzugefügt
werden soll.
Wird diese Frage bejaht, wird die Funktion \textit{AddHomeServer }
(Kapitel~\ref{subsec:RemoteserverAnzeigen},
Seite~\pageref{subsec:RemoteserverAnzeigen}) aufgerufen.
<<AddGitServer>>=
function AddGitServer {
# Called by OwnServer
serverlist=$(git remote -v)
if whiptail --title "Recent remote servers" \
--yesno "${serverlist}\nAdd git remote server 'home'?" \
--yes-button "Yes" \
--no-button "No" 15 60
then
AddHomeServer
fi
}
<<OwnServer>>
@
\chapter{Kopf des Skriptes}
\section{Shebang}
Am Anfang des Skriptes befinden sich die \textit{Shebang}, Vermerke über
die Autoren, die Version und die Lizenz.
<<build-gbp.sh>>=
#!/usr/bin/bash
<<copyright>>
@
\section{Copyright-Vermerk}
Auf die \textit{Shebang} folgt der Copyright-Vermerk.
<<copyright>>=
# Copyright 2019-2025 Mechtilde and Michael Stehmann <mechtilde@debian.org>
# version 0.9.9
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 31 Milk Street, #960789 Boston,
# MA 02196, USA.
<<Dependencies>>
@
\section{Abhängigkeiten für das Programmskript}
\label{sec:scriptdependency}
Sodann werden die Abhängigkeiten aufgeführt
(s.a. Kapitel~\ref{sec:ScriptDependencies},
Seite~\pageref{sec:ScriptDependencies}).
<<Dependencies>>=
# Dependencies: git-buildpackage, build-essential, less, pbuilder,
# pristine-tar, sudo, unzip, cowbuilder, cowdancer, debmake, quilt,
# locate, jq, lintian, devscripts, debhelper,
# sbuild, schroot, debootstrap, apt-cacher-ng,
# gradle-debian-helper, maven-debian-helper, libmaven-bundle-plugin-java
<<Header>>
@
\section{\textit{set -e} und Funktionsheader}
Nach der \texttt{Debian}-Policy\footnote{\url{https://www.debian.org/doc/debian-policy/ch-files.html\#scripts}
\cite{DebianPolicy}} soll jedes Skript entweder \textit{set -e} benutzen
oder den Exit-Status jedes Befehls prüfen.
\textit{set -e} veranlasst das Programmskript zum sofortigen Beenden bei
Fehlern. Dies ist dann der Fall, wenn ein Befehl oder eine Pipeline
(Symbol: \enquote{|}) einen \textit{Exit}-Status ungleich \textit{0} zurückgibt.
Dieses Verhalten ist jedoch an einigen Stellen im Programmskript
unerwünscht, beispielsweise wenn der Rückgabewert vom Programmskript
abgefragt und zur Ablaufsteuerung verwandt wird. In diesen Fällen wird
dieses Verhalten durch \textit{set +e} temporär ausgeschaltet.
<<Header>>=
set -e
##########################
# Definitions of functions
##########################
<<DebugRP>>
@
Der Funktionsheader makiert für den Leser den Beginn der technischen
Beschreibungen der Funktionen.
\section{Funktion zur Fehlersuche}
Die folgende Funktion zeigt einen Pfad und ermöglicht gegebenenfalls
einen Ausstieg aus dem Programm.
Sie dient dem Debuging und ist normalerweie ungenutzt.
<<DebugRP>>=
function DebugRP {
# Function to show a path and give an opportunity to exit
# It is for debugging
descstr=${1}
pathstr=${2}
if ! whiptail --title "Shows the path" \
--yesno "${descstr}= ${pathstr}?" --yes-button "Yes" \
--no-button "No" 15 60
then
exit
fi
}
<<InsertConfigLine>>
@
|