X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=git-filter-branch.sh;h=8fa5ce6467b12119868a4c3c74c3e3740f6d6b8e;hb=e1341abc3759950e891822088cb0163b71b316b3;hp=efb8f2dbca9c347395557bdc178b8a256e266eb5;hpb=685ef546b62d063c72b401cd38b83a879301aac4;p=git.git diff --git a/git-filter-branch.sh b/git-filter-branch.sh old mode 100755 new mode 100644 index efb8f2dbc..8fa5ce646 --- a/git-filter-branch.sh +++ b/git-filter-branch.sh @@ -178,6 +178,14 @@ # # git-filter-branch ... new-H C..H --not D # git-filter-branch ... new-H D..H --not C +# +# To move the whole tree into a subdirectory, or remove it from there: +# +# git-filter-branch --index-filter \ +# 'git-ls-files -s | sed "s-\t-&newsubdir/-" | +# GIT_INDEX_FILE=$GIT_INDEX_FILE.new \ +# git-update-index --index-info && +# mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE' directorymoved # Testsuite: TODO @@ -226,17 +234,6 @@ set_ident () { echo "[ -n \"\$GIT_${uid}_NAME\" ] || export GIT_${uid}_NAME=\"\${GIT_${uid}_EMAIL%%@*}\"" } -# list all parent's object names for a given commit -get_parents () { - case "$filter_subdir" in - "") - git-rev-list -1 --parents "$1" - ;; - *) - git-rev-list -1 --parents "$1" -- "$filter_subdir" - esac | sed "s/^[0-9a-f]*//" -} - tempdir=.git-rewrite filter_env= filter_tree= @@ -329,18 +326,19 @@ mkdir ../map # map old->new commit ids for rewriting parents case "$filter_subdir" in "") - git-rev-list --reverse --topo-order --default HEAD "$@" + git-rev-list --reverse --topo-order --default HEAD \ + --parents "$@" ;; *) - git-rev-list --reverse --topo-order --default HEAD "$@" \ - -- "$filter_subdir" + git-rev-list --reverse --topo-order --default HEAD \ + --parents --full-history "$@" -- "$filter_subdir" esac > ../revs commits=$(cat ../revs | wc -l | tr -d " ") test $commits -eq 0 && die "Found nothing to rewrite" i=0 -while read commit; do +while read commit parents; do i=$(($i+1)) printf "$commit ($i/$commits) " @@ -374,7 +372,7 @@ while read commit; do eval "$filter_index" < /dev/null parentstr= - for parent in $(get_parents $commit); do + for parent in $parents; do for reparent in $(map "$parent"); do parentstr="$parentstr -p $reparent" done @@ -389,7 +387,7 @@ while read commit; do tee ../map/$commit done <../revs -src_head=$(tail -n 1 ../revs) +src_head=$(tail -n 1 ../revs | sed -e 's/ .*//') target_head=$(head -n 1 ../map/$src_head) case "$target_head" in '')