]> git.lizzy.rs Git - plan9front.git/commitdiff
git/branch: reduce execs to sync working dir
authorOri Bernstein <ori@eigenstate.org>
Mon, 31 May 2021 02:06:01 +0000 (19:06 -0700)
committerOri Bernstein <ori@eigenstate.org>
Mon, 31 May 2021 02:06:01 +0000 (19:06 -0700)
We were execing a lot to copy the data -- do less of it.

sys/src/cmd/git/branch

index f2656f2fa24b654722d148c1da4dcd4b89e3f5cc..48e4f0d729f8e8e5c83d1b5c80ba7e246161b314 100755 (executable)
@@ -63,32 +63,42 @@ if(~ $new */*)
 echo $commit > .git/$new
 if(! ~ $#stay 0)
        exit
-
 basedir=`{git/query -p $base}
 dirtypaths=()
 cleanpaths=($modified $deleted)
-if(! ~ $#modified 0 || ! ~ $#deleted 0)
+if(! ~ $#modified 0 || ! ~ $#deleted 0){
+       echo WUT
        dirtypaths=`$nl{git/walk -cfRMA $modified $deleted}
+}
 if(! ~ $#dirtypaths 0){
        x=$nl^$cleanpaths
        y=$nl^$dirtypaths
        cleanpaths=`$nl{echo $"x$nl$"y | sort | uniq -u}
 }
+if(! ~ $#cleanpaths 0)
+       cleandirs=`$nl{echo $nl^$cleanpaths | sed 's@/[^/]+/?$@@' | uniq}
+if(! ~ $#cleandirs 0){
+       mkdir -p $cleandirs
+       mkdir -p .git/index9/tracked/$cleandirs
+}
+echo clean: $#clean
+echo dirty: $#dirty
 for(m in $cleanpaths){
-       d=`{basename -d $m}
-       mkdir -p $d
-       mkdir -p .git/index9/tracked/$d
        # Modifications can turn a file into
        # a directory, or vice versa, so we
        # need to delete and copy the files
        # over.
-       a=`{test -f $m && echo file || echo dir}
-       b=`{test -f $basedir/tree/$m && echo file || echo dir}
+       a=dir
+       b=dir
+       if(test -f $m)
+               a=file
+       if(test -f $basedir/tree/$m)
+               b=file
        if(! ~ $a $b){
                rm -rf $m
                rm -rf .git/index9/tracked/$m
        }
-       if(test -f $basedir/tree/$m){
+       if(~ $b file){
                cp  $basedir/tree/$m $m
                walk -eq $m > .git/index9/tracked/$m
        }