threads / patch / 8510

patch, 2 partsfilter-branch: Simplify parent computation.

Subject: [PATCH 1/2] filter-branch: Simplify parent computation.

## tl;dr

4 messages between Jun 8, 2007 and Jun 10, 2007. Diffs are folded; open one to read it.

replies: 3people: 3as markdown or json

Johannes Sixt· Jun 8, 2007, 21:28 UTC · lore

We can use git rev-list --parents when we list the commits to rewrite. It is not necessary to run git rev-list --parents for each commit in the loop.

Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
---
 git-filter-branch.sh |   24 +++++++-----------------
 1 files changed, 7 insertions(+), 17 deletions(-)
Show changes to git-filter-branch.sh +7 −17
diff --git a/git-filter-branch.sh b/git-filter-branch.sh
index 4990729..4ef4570 100755
--- a/git-filter-branch.sh
+++ b/git-filter-branch.sh
@@ -229,17 +229,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=
@@ -332,18 +321,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 "$@" -- "$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 "\rRewriting commits... ($i/$commits)"
 
@@ -377,7 +367,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
@@ -398,7 +388,7 @@ while read commit; do
 		done > ../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
 '')
-- 
1.5.2
Junio C Hamano· Jun 9, 2007, 20:44 UTC · re: Johannes Sixt · lore

Re: [PATCH 1/2] filter-branch: Simplify parent computation.

Johannes Sixt <johannes.sixt@telecom.at> writes:
> @@ -332,18 +321,19 @@ mkdir ../map # map old->new commit ids for rewriting 
> parents
>  
Crap.  Why is this patch line-wrapped X-<.
Show 7 quoted lines
> ... 
>  i=0
> -while read commit; do
> +while read commit parents; do
>  	i=$(($i+1))
>  	printf "\rRewriting commits... ($i/$commits)"
>  

Crap. Where did that "\rRewriting commits..." come from? The other Johannes had the same in his patch.

Show 9 quoted lines
> @@ -398,7 +388,7 @@ while read commit; do
>  		done > ../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
>  '')
Crap.  I seem to have "tee" there that stores them to ../map/$commit.

Anyway, I've manually fixed up the offending three patches (two from you and one from the other Johannes) and pushed the results out on 'next'.

Johannes Schindelin· Jun 10, 2007, 07:14 UTC · re: Junio C Hamano · lore

Re: [PATCH 1/2] filter-branch: Simplify parent computation.

Hi,
On Sat, 9 Jun 2007, Junio C Hamano wrote:
> Anyway, I've manually fixed up the offending three patches (two from you 
> and one from the other Johannes) and pushed the results out on 'next'.

Sorry. I guess we were just beaming patches back and forth, applying them in our local repos, and working from there.

I promise to try better.

Ciao, Dscho

← back to recent threads