From 668d5725498f8f20c26fc8b3b0bd4db4ddcd19fd Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Sun, 31 Dec 2017 13:11:06 +0100 Subject: [PATCH] feat(import-packages): add commit mode and make it the default --- scripts/import-packages | 86 +++++++++++++++++++++++++++++++---------- 1 file changed, 65 insertions(+), 21 deletions(-) diff --git a/scripts/import-packages b/scripts/import-packages index 132f93767..7c6ecc315 100755 --- a/scripts/import-packages +++ b/scripts/import-packages @@ -2,19 +2,69 @@ set -eu -if [ $# -eq 0 ] -then - echo "$0 ..." - exit -fi +usage () { + echo "$0 [--commit | --rewrite] ..." +} + +move=commit +while [ $# -ne 0 ] +do + case "$1" in + -h|--help) + usage + exit + ;; + --commit) + move=commit + ;; + --rewrite) + move=rewrite + ;; + -*) + echo "Invalid argument: $1" >&2 + usage >&2 + exit 1 + ;; + *) + break + ;; + esac + shift +done + +# Create a commit in branch /master moving all files in . +move_commit () { + local head index new_index + head=$(git symbolic-ref HEAD) + + git symbolic-ref HEAD "refs/heads/$1/master" + + index=$(git rev-parse --git-path index) + new_index=$index.new + git read-tree HEAD + git ls-files -s | \ + sed "s%\t\"*%&$2/%" | \ + GIT_INDEX_FILE=$new_index git update-index --index-info + mv "$index.new" "$index" + git commit -m "feat($1): move all files to $2" + + git symbolic-ref HEAD "$head" + git read-tree HEAD +} + +# Rewrite all branches /* moving all files in . +move_rewrite () { + git filter-branch -f --index-filter ' + git ls-files -s | \ + sed "s%\t\"*%&'"$2"'/%" | \ + GIT_INDEX_FILE=$GIT_INDEX_FILE.new \ + git update-index --index-info && \ + if [ -f "$GIT_INDEX_FILE.new" ]; then \ + mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"; \ + fi + ' --tag-name-filter 'cat' -- --branches="$1/*" +} -# Import repositories into this mono-repo. -# -# For each repository: -# -# 1. import all branches and tags as /* -# 2. rewrite history, moving all files into packages/ -# 3. merge and delete /master for url do pkg=$(basename "$url" .git) @@ -23,22 +73,16 @@ do continue fi + # import all branches and tags as /* git remote add "$pkg" "$url" git fetch --no-tags "$pkg" \ "refs/heads/*:refs/heads/$pkg/*" \ "refs/tags/*:refs/tags/$pkg/*" git remote rm "$pkg" - git filter-branch -f --index-filter ' - git ls-files -s | \ - sed "s%\t\"*%&packages/'"$pkg"'/%" | \ - GIT_INDEX_FILE=$GIT_INDEX_FILE.new \ - git update-index --index-info && \ - if [ -f "$GIT_INDEX_FILE.new" ]; then \ - mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"; \ - fi - ' --tag-name-filter 'cat' -- --branches="$pkg/*" + move_"$move" "$pkg" "packages/$pkg" + # merge and delete master branch git merge --allow-unrelated-histories "$pkg/master" git branch -d "$pkg/master" done