diff --git a/bin/add-git-folder b/bin/add-git-folder index 113c733..41f8520 100755 --- a/bin/add-git-folder +++ b/bin/add-git-folder @@ -20,13 +20,10 @@ add-git-folder() { # Ensure branch is Odoo version git -C "$3" switch "$1" - # Save version - save-version - - # Restore staged submodule files - git restore --staged .gitmodules "$3" - # Remove from working tree - # rm -rf .git/modules/"$2" || true - # git rm --cached "$2" || true + rm -rf .git/modules/"$2" || true + git rm --cached "$2" || true + + # Save version + save-git-folder } \ No newline at end of file diff --git a/bin/add-git-merge b/bin/add-git-merge new file mode 100755 index 0000000..61762db --- /dev/null +++ b/bin/add-git-merge @@ -0,0 +1,22 @@ +#!/bin/bash + +add-git-merge() { + if [[ -z "$1" ]]; then + echo '$1/remote is empty.' >&2 + exit 1 + fi + if [[ -z "$2" ]]; then + echo '$2/merge is empty.' >&2 + exit 1 + fi + if [[ -z "$3" ]]; then + echo '$3/path is empty.' >&2 + exit 1 + fi + + local remote_name="$1" + local merge_ref="$2" + local submodule_path="$3" + + git config -f .gitmodules --add merge."$submodule_path"."$remote_name" "$merge_ref" +} \ No newline at end of file diff --git a/bin/add-git-remote b/bin/add-git-remote index 8e1c92d..9b3b898 100755 --- a/bin/add-git-remote +++ b/bin/add-git-remote @@ -2,18 +2,23 @@ add-git-remote() { if [[ -z "$1" ]]; then - echo '$1/remote is empty.' - exit + echo '$1/remote is empty.' >&2 + exit 1 fi if [[ -z "$2" ]]; then - echo '$2/url is empty.' - exit + echo '$2/url is empty.' >&2 + exit 1 fi if [[ -z "$3" ]]; then - echo '$3/path is empty.' - exit + echo '$3/path is empty.' >&2 + exit 1 fi - echo "Add remote $1 with url $2 to $3:" - git -C "$3" remote add "$1" "$2" + local remote_name="$1" + local remote_url="$2" + local submodule_path="$3" + + git -C "$submodule_path" remote add "$remote_name" "$remote_url" 2>/dev/null || true + + git config -f .gitmodules --add remotes."$submodule_path"."$remote_name" "$remote_url" } \ No newline at end of file diff --git a/bin/merge-git-remote b/bin/merge-git-remote new file mode 100755 index 0000000..f35e5f2 --- /dev/null +++ b/bin/merge-git-remote @@ -0,0 +1,37 @@ +#!/bin/bash + +merge-git-remote() { + local git_folders=$(ls-git-folder .) + + for git_folder in $git_folders; do + git_folder="${git_folder#./}" + + local remote_names + remote_names=$(git config -f .gitmodules --get-regexp "remotes\.$git_folder\..*" | sed 's/.*\.\(.*\)$/\1/') + + if [[ -z "$remote_names" ]]; then + continue + fi + + for remote_name in $remote_names; do + local remote_url=$(git config -f .gitmodules remotes."$git_folder"."$remote_name") + if [[ -z "$remote_url" ]]; then + continue + fi + + git -C "$git_folder" remote add "$remote_name" "$remote_url" 2>/dev/null || true + + local merge_ref=$(git config -f .gitmodules merge."$git_folder"."$remote_name") + if [[ -z "$merge_ref" ]]; then + merge_ref="HEAD" + fi + + git -C "$git_folder" fetch "$remote_name" + + git -C "$git_folder" checkout -B merged "$remote_name/$merge_ref" 2>/dev/null || \ + git -C "$git_folder" checkout -b merged "$remote_name/$merge_ref" + + git -C "$git_folder" merge "$remote_name/$merge_ref" 2>/dev/null || true + done + done +} \ No newline at end of file