[PATCH util-modular 4/4] release.sh: implement around git worktree

Emil Velikov emil.l.velikov at gmail.com
Thu Jan 19 19:30:10 UTC 2017


From: Emil Velikov <emil.velikov at collabora.com>

Months ago, before my work in here there the script had a number of
assumptions:
 - autoreconf or alike is ran by the user - slight nuisance esp. when
releasing multiple packages.
 - the generated files were compatible with the ones on the server -
rarely and issue, but still
 - config.status means 'all the autotools bits were generated correctly'
 - failed to consider if user has multiple config.status - using
./build-64bit/ and ./build-32bit/ anyone ?
 - ...

With 663364cda5e316a0509ff5869293e3a815b9945f we mitigated a lot of that
but did not consider
 - forcing people to `git clean' is annoying and if not careful one can
purge local files that they want to keep
 - the files generated by autotools were left behind

In order to mitigate those use git worktree. This is more efficient
[both bandwidth and storage wise] than pulling/generating git tarballs,
git clone and friends.

Cc: Peter Hutterer <peter.hutterer at who-t.net>
Signed-off-by: Emil Velikov <emil.velikov at collabora.com>
---
There's a git of noise produced by git worktree and autoreconf. I'm fine
with 2>/dev/null but I'd leave that to others to decide
---
 release.sh | 34 +++++++++++++++++++---------------
 1 file changed, 19 insertions(+), 15 deletions(-)

diff --git a/release.sh b/release.sh
index 8ed179d..0b3fcbf 100755
--- a/release.sh
+++ b/release.sh
@@ -357,25 +357,24 @@ process_module() {
 	return 1
     fi
 
-    if [ -e configure ]; then
-        echo "Error: the git repository contains configure"
-        echo "Did you forget to run git clean -fXd (and git clean -fxd) ?"
-        return 1
-    fi
-
-    # Create tmpdir for the build
+    # Create tmpdir for the release
     build_dir=`mktemp -d -p . build.XXXXXXXXXX`
     if [ $? -ne 0 ]; then
-        echo "Error: could not create a temporary directory for the build."
+        echo "Error: could not create a temporary directory for the release"
         echo "Do you have coreutils' mktemp ?"
         return 1
     fi
 
-    echo "Info: generating configure."
-    autoreconf --force --install >/dev/null
+    # Worktree removal is intentionally left to the user, due to:
+    #  - currently we cannot select only one worktree to prune
+    #  - requires to removal of $build_dir which might contradict with the
+    # user decision to keep some artefacts like tarballs or other
+    echo "Info: creating new git worktree."
+    git worktree add $build_dir
     if [ $? -ne 0 ]; then
-        echo "Error: failed to generate configure."
-        return 1
+	echo "Error: failed to create a git worktree."
+	cd $top_src
+	return 1
     fi
 
     cd $build_dir
@@ -385,9 +384,14 @@ process_module() {
 	return 1
     fi
 
-    # Using ../ here feels a bit nasty, yet $top_src is an absolute path. Thus
-    # it will get propagated in the generated sources, which we do not want.
-    ../configure >/dev/null
+    echo "Info: generating configure."
+    autoreconf --force --install >/dev/null
+    if [ $? -ne 0 ]; then
+        echo "Error: failed to generate configure."
+        return 1
+    fi
+
+    ./configure >/dev/null
     if [ $? -ne 0 ]; then
         echo "Error: failed to configure module."
         cd $top_src
-- 
2.11.0



More information about the xorg-devel mailing list