start
This commit is contained in:
commit
3653671369
80
updatemodules
Executable file
80
updatemodules
Executable file
@ -0,0 +1,80 @@
|
||||
#!/bin/bash
|
||||
pushurl="gitea@gitea.opensuse.org:lnussel/core.git"
|
||||
prsrcusr="lnussel"
|
||||
prtarget="https://gitea.opensuse.org/api/v1/repos/mold/core/pulls"
|
||||
|
||||
modules=($@)
|
||||
origin="$(git config --get remote.origin.url)"
|
||||
#now="$(date "+%s %z")"
|
||||
# FIXME: hardcoded to avoid changing commits for now
|
||||
now="1668592380 +0100"
|
||||
export GIT_AUTHOR_NAME="Auto"
|
||||
export GIT_AUTHOR_EMAIL="auto@suse.de"
|
||||
export GIT_AUTHOR_DATE="$now"
|
||||
export GIT_COMMITTER_NAME="Auto"
|
||||
export GIT_COMMITTER_EMAIL="auto@suse.de"
|
||||
export GIT_COMMITTER_DATE="$now"
|
||||
|
||||
tmpfile=$(mktemp updatemodules.XXXXXX)
|
||||
cleanup()
|
||||
{
|
||||
rm -f "$tmpfile"
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
read token < token || exit 1
|
||||
|
||||
declare -A revs
|
||||
while read m t cid p; do
|
||||
[ "$t" = "commit" ] || continue
|
||||
revs["$p"]="$cid"
|
||||
done < <(git cat-file -p HEAD^{tree})
|
||||
|
||||
if [ -z "$modules" ]; then
|
||||
modules=("${!revs[@]}")
|
||||
fi
|
||||
|
||||
declare -A commits
|
||||
for m in "${modules[@]}"; do
|
||||
path="$(git config -f .gitmodules --get "submodule.$m.path")"
|
||||
url="$(git config -f .gitmodules --get "submodule.$m.url")"
|
||||
branch="$(git config -f .gitmodules --get "submodule.$m.branch")"
|
||||
if [ -z "$path" -o -z "$url" ]; then
|
||||
echo "$m unknown" >&2
|
||||
continue
|
||||
fi
|
||||
if [ "${url:0:3}" = '../' ]; then
|
||||
url="$origin/$url"
|
||||
fi
|
||||
read cid _d < <(git ls-remote "$url" "${branch:-HEAD}")
|
||||
if [ -z "${revs[$path]}" ]; then
|
||||
echo "$path unknown" >&2
|
||||
continue
|
||||
fi
|
||||
if [ "${revs[$path]}" != "$cid" ]; then
|
||||
echo "Needs update: $path@${revs[$path]} -> $cid"
|
||||
newtree="$(git cat-file -p HEAD^{tree} | sed -e "s/${revs[$path]}\t$path/$cid\t$path/" | git mktree)"
|
||||
newcid="$(git commit-tree -p HEAD -m "Update $m" "$newtree")"
|
||||
commits["$m"]="$newcid"
|
||||
fi
|
||||
done
|
||||
|
||||
for m in "${!commits[@]}"; do
|
||||
if git send-pack --force "$pushurl" "${commits[$m]}:refs/heads/update_$m"; then
|
||||
#https://github.com/go-gitea/gitea/issues/18842
|
||||
if curl -s -f "$prtarget" \
|
||||
-H "accept: application/json" \
|
||||
-H "Authorization: token $token" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{ \"base\": \"main\", \"head\": \"$prsrcusr:update_$m\", \"title\": \"Update $m\"}" > "$tmpfile"; then
|
||||
prid=$(jq .id < "$tmpfile")
|
||||
echo "filed pr #$prid for $m"
|
||||
else
|
||||
echo "failed to file pr for $m"
|
||||
jq .message < "$tmpfile"
|
||||
fi
|
||||
else
|
||||
echo "failed to push $m update" >&2
|
||||
jq .message < "$tmpfile"
|
||||
fi
|
||||
done
|
Loading…
x
Reference in New Issue
Block a user