feat(merge-git-remote): refactor remote fetch and merge logic for clarity and robustness
This commit is contained in:
1 file changed
+17
-6
+17
-6
@@ -16,7 +16,8 @@ merge-git-remote() {
|
||||
key=$(echo "$line" | awk '{print $1}')
|
||||
value=$(echo "$line" | awk '{print $2}')
|
||||
remote_name="${key##remotes.$git_folder.}"
|
||||
echo " Adding remote '$remote_name' -> $value"
|
||||
|
||||
echo "Adding remote '$remote_name' -> $value"
|
||||
git -C "$git_folder" remote add "$remote_name" "$value" 2>/dev/null || \
|
||||
git -C "$git_folder" remote set-url "$remote_name" "$value"
|
||||
git -C "$git_folder" fetch -q "$remote_name"
|
||||
@@ -35,17 +36,27 @@ merge-git-remote() {
|
||||
git -C "$git_folder" fetch -q origin
|
||||
fi
|
||||
|
||||
# Fetch the refs from remote
|
||||
while IFS= read -r line; do
|
||||
local key merge_ref remote_name tmp_ref
|
||||
key=$(echo "$line" | awk '{print $1}')
|
||||
merge_ref=$(echo "$line" | awk '{print $2}')
|
||||
remote_name="${key##merge.$git_folder.}"
|
||||
echo " Merging $remote_name/$merge_ref"
|
||||
|
||||
echo "Fetch ref $merge_ref from $remote_name"
|
||||
git -C "$git_folder" fetch "$remote_name" "$merge_ref:$merge_ref"
|
||||
|
||||
done < <(git config -f .gitmodules --get-regexp "merge\.$git_folder\.")
|
||||
|
||||
# Merge refs into merge branch
|
||||
while IFS= read -r line; do
|
||||
local key merge_ref remote_name tmp_ref
|
||||
key=$(echo "$line" | awk '{print $1}')
|
||||
merge_ref=$(echo "$line" | awk '{print $2}')
|
||||
remote_name="${key##merge.$git_folder.}"
|
||||
|
||||
echo "Merging ref $merge_ref"
|
||||
tmp_ref="refs/merge-tmp/${remote_name}-$(echo "$merge_ref" | tr '/' '-')"
|
||||
if ! git -C "$git_folder" fetch -q "$remote_name" "$merge_ref:$tmp_ref"; then
|
||||
echo " !! Could not fetch $merge_ref from $remote_name — skipping"
|
||||
continue
|
||||
fi
|
||||
if ! git -C "$git_folder" merge -q --no-edit "$tmp_ref"; then
|
||||
echo " !! Merge conflict in $git_folder ($remote_name/$merge_ref) — resolve manually"
|
||||
fi
|
||||
|
||||
Reference in new issue
Block a user