aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2019-08-23 23:04:30 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2019-08-28 17:00:37 +0300
commit796822f9d40b3da3fd507bcae32bc8e53207ba98 (patch)
tree8cd02eae46b012d610ae36b311975014466b8472
parentcd431f3f8bca937d4d0ff5b165e556d719329085 (diff)
Make submit-git handler to remove existing package version revision
-rw-r--r--brep/handler/submit/submit-git.in31
1 files changed, 30 insertions, 1 deletions
diff --git a/brep/handler/submit/submit-git.in b/brep/handler/submit/submit-git.in
index 0ae0f3f..347ca19 100644
--- a/brep/handler/submit/submit-git.in
+++ b/brep/handler/submit/submit-git.in
@@ -188,6 +188,7 @@ ref_lock_timeout=30
trap "{ exit 1; }" ERR
set -o errtrace # Trap ERR in functions.
+set -o pipefail # Return the rightmost non-zero exit status in a pipeline.
@import brep/handler/handler@
@import brep/handler/submit/submit@
@@ -622,7 +623,12 @@ for i in {1..11}; do
fi
fi
- # Add the package archive to the target repository.
+ # Remove the package version revision archives that may exist in the section
+ # directory of the target repository.
+ #
+ # Note that it could be desirable to keep multiple revisions in different
+ # sections. However, we need to remove a package revision that may
+ # potentially exist in a different project.
#
s="$(section_dir "$section" "$tgt_dir")"
@@ -630,9 +636,32 @@ for i in {1..11}; do
exit_with_manifest 400 "unrecognized section '$section'"
fi
+ # Strips the version revision part, if present.
+ #
+ v="$(sed -n -re 's%^(\+?[^+]+)(\+[0-9]+)?$%\1%p' <<<"$version")"
+
+ # Make sure the section directory exists before we run find in it.
+ #
d="$tgt_dir/$s/$project"
run mkdir -p "$d" # Create all the parent directories as well.
+ # Go through the potentially matching archives (for example, for
+ # foo-1.2.3+2: foo-1.2.3.tar.gz, foo-1.2.3+1.tar.gz, foo-1.2.30.tar.gz, etc)
+ # and remove those that match exactly.
+ #
+ # Change CWD to the section directory to make sure that the found archive
+ # paths doesn't contain spaces.
+ #
+ fs=($(run cd "$tgt_dir/$s" && run find -name "$name-$v*"))
+
+ for f in "${fs[@]}"; do
+ if [[ "$f" =~ ^\./[^/]+/"$name-$v"(\+[0-9]+)?\.[^/]+$ ]]; then
+ run git -C "$tgt_dir" rm $gqo "$s/$f" >&2
+ fi
+ done
+
+ # Finally, add the package archive to the target repository.
+ #
# We copy the archive rather than move it since we may need it for a re-try.
#
a="$d/$archive"