% !TEX root = BuildWithGBP.nw% ===> this file was generated automatically by noweave --- better not edit it
\part{Weitere Bestandteile des Skriptes}

\chapter{Weitere Aufgaben}

\section{Neuen Branch erstellen}
\label{sec:NeuenBranchErstellen}

\nwfilename{Part5.nw}\nwbegincode{1}\sublabel{NW4N9OxL-1We84c-1}\nwmargintag{{\nwtagstyle{}\subpageref{NW4N9OxL-1We84c-1}}}\moddef{CreateNewBranch~{\nwtagstyle{}\subpageref{NW4N9OxL-1We84c-1}}}\endmoddef\nwstartdeflinemarkup\nwenddeflinemarkup
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
\}

\LA{}ParseConfig~{\nwtagstyle{}\subpageref{nw@notdef}}\RA{}
\nwnotused{CreateNewBranch}\nwendcode{}\nwbegindocs{2}\nwdocspar

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.

\nwenddocs{}\nwbegincode{3}\sublabel{NW4N9OxL-pLB35-1}\nwmargintag{{\nwtagstyle{}\subpageref{NW4N9OxL-pLB35-1}}}\moddef{OwnServer~{\nwtagstyle{}\subpageref{NW4N9OxL-pLB35-1}}}\endmoddef\nwstartdeflinemarkup\nwusesondefline{\\{NW4N9OxL-prxKJ-1}}\nwenddeflinemarkup
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
\}

\LA{}Ask4DebDiff~{\nwtagstyle{}\subpageref{nw@notdef}}\RA{}
\nwused{\\{NW4N9OxL-prxKJ-1}}\nwendcode{}\nwbegindocs{4}\nwdocspar

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.

\nwenddocs{}\nwbegincode{5}\sublabel{NW4N9OxL-prxKJ-1}\nwmargintag{{\nwtagstyle{}\subpageref{NW4N9OxL-prxKJ-1}}}\moddef{AddGitServer~{\nwtagstyle{}\subpageref{NW4N9OxL-prxKJ-1}}}\endmoddef\nwstartdeflinemarkup\nwenddeflinemarkup
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
\}

\LA{}OwnServer~{\nwtagstyle{}\subpageref{NW4N9OxL-pLB35-1}}\RA{}
\nwnotused{AddGitServer}\nwendcode{}\nwbegindocs{6}\nwdocspar

\chapter{Kopf des Skriptes}

\section{Shebang}
Am Anfang des Skriptes befinden sich die \textit{Shebang}, Vermerke über
die Autoren, die Version und die Lizenz.

\nwenddocs{}\nwbegincode{7}\sublabel{NW4N9OxL-42a6Y2-1}\nwmargintag{{\nwtagstyle{}\subpageref{NW4N9OxL-42a6Y2-1}}}\moddef{build-gbp.sh~{\nwtagstyle{}\subpageref{NW4N9OxL-42a6Y2-1}}}\endmoddef\nwstartdeflinemarkup\nwenddeflinemarkup
#!/usr/bin/bash

\LA{}copyright~{\nwtagstyle{}\subpageref{NW4N9OxL-3CaW5t-1}}\RA{}
\nwnotused{build-gbp.sh}\nwendcode{}\nwbegindocs{8}\nwdocspar

\section{Copyright-Vermerk}

Auf die \textit{Shebang} folgt der Copyright-Vermerk.

\nwenddocs{}\nwbegincode{9}\sublabel{NW4N9OxL-3CaW5t-1}\nwmargintag{{\nwtagstyle{}\subpageref{NW4N9OxL-3CaW5t-1}}}\moddef{copyright~{\nwtagstyle{}\subpageref{NW4N9OxL-3CaW5t-1}}}\endmoddef\nwstartdeflinemarkup\nwusesondefline{\\{NW4N9OxL-42a6Y2-1}}\nwenddeflinemarkup
# Copyright 2019-2025 Mechtilde and Michael Stehmann <mechtilde@debian.org>
# version 0.9.0

# 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., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.

\LA{}Dependencies~{\nwtagstyle{}\subpageref{NW4N9OxL-2PiXwE-1}}\RA{}
\nwused{\\{NW4N9OxL-42a6Y2-1}}\nwendcode{}\nwbegindocs{10}\nwdocspar

\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}).

\nwenddocs{}\nwbegincode{11}\sublabel{NW4N9OxL-2PiXwE-1}\nwmargintag{{\nwtagstyle{}\subpageref{NW4N9OxL-2PiXwE-1}}}\moddef{Dependencies~{\nwtagstyle{}\subpageref{NW4N9OxL-2PiXwE-1}}}\endmoddef\nwstartdeflinemarkup\nwusesondefline{\\{NW4N9OxL-3CaW5t-1}}\nwenddeflinemarkup
# 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

\LA{}Header~{\nwtagstyle{}\subpageref{NW4N9OxL-2Cop3h-1}}\RA{}
\nwused{\\{NW4N9OxL-3CaW5t-1}}\nwendcode{}\nwbegindocs{12}\nwdocspar

\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.

\nwenddocs{}\nwbegincode{13}\sublabel{NW4N9OxL-2Cop3h-1}\nwmargintag{{\nwtagstyle{}\subpageref{NW4N9OxL-2Cop3h-1}}}\moddef{Header~{\nwtagstyle{}\subpageref{NW4N9OxL-2Cop3h-1}}}\endmoddef\nwstartdeflinemarkup\nwusesondefline{\\{NW4N9OxL-2PiXwE-1}}\nwenddeflinemarkup

set -e

##########################

# Definitions of functions

##########################

\LA{}DebugRP~{\nwtagstyle{}\subpageref{NW4N9OxL-R1FC0-1}}\RA{}
\nwused{\\{NW4N9OxL-2PiXwE-1}}\nwendcode{}\nwbegindocs{14}\nwdocspar

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.

\nwenddocs{}\nwbegincode{15}\sublabel{NW4N9OxL-R1FC0-1}\nwmargintag{{\nwtagstyle{}\subpageref{NW4N9OxL-R1FC0-1}}}\moddef{DebugRP~{\nwtagstyle{}\subpageref{NW4N9OxL-R1FC0-1}}}\endmoddef\nwstartdeflinemarkup\nwusesondefline{\\{NW4N9OxL-2Cop3h-1}}\nwenddeflinemarkup
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
\}

\LA{}InsertConfigLine~{\nwtagstyle{}\subpageref{nw@notdef}}\RA{}
\nwused{\\{NW4N9OxL-2Cop3h-1}}\nwendcode{}

\nwixlogsorted{c}{{AddGitServer}{NW4N9OxL-prxKJ-1}{\nwixd{NW4N9OxL-prxKJ-1}}}%
\nwixlogsorted{c}{{Ask4DebDiff}{nw@notdef}{\nwixu{NW4N9OxL-pLB35-1}}}%
\nwixlogsorted{c}{{build-gbp.sh}{NW4N9OxL-42a6Y2-1}{\nwixd{NW4N9OxL-42a6Y2-1}}}%
\nwixlogsorted{c}{{copyright}{NW4N9OxL-3CaW5t-1}{\nwixu{NW4N9OxL-42a6Y2-1}\nwixd{NW4N9OxL-3CaW5t-1}}}%
\nwixlogsorted{c}{{CreateNewBranch}{NW4N9OxL-1We84c-1}{\nwixd{NW4N9OxL-1We84c-1}}}%
\nwixlogsorted{c}{{DebugRP}{NW4N9OxL-R1FC0-1}{\nwixu{NW4N9OxL-2Cop3h-1}\nwixd{NW4N9OxL-R1FC0-1}}}%
\nwixlogsorted{c}{{Dependencies}{NW4N9OxL-2PiXwE-1}{\nwixu{NW4N9OxL-3CaW5t-1}\nwixd{NW4N9OxL-2PiXwE-1}}}%
\nwixlogsorted{c}{{Header}{NW4N9OxL-2Cop3h-1}{\nwixu{NW4N9OxL-2PiXwE-1}\nwixd{NW4N9OxL-2Cop3h-1}}}%
\nwixlogsorted{c}{{InsertConfigLine}{nw@notdef}{\nwixu{NW4N9OxL-R1FC0-1}}}%
\nwixlogsorted{c}{{OwnServer}{NW4N9OxL-pLB35-1}{\nwixd{NW4N9OxL-pLB35-1}\nwixu{NW4N9OxL-prxKJ-1}}}%
\nwixlogsorted{c}{{ParseConfig}{nw@notdef}{\nwixu{NW4N9OxL-1We84c-1}}}%
\nwbegindocs{16}\nwdocspar
\nwenddocs{}
