From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 14804 invoked from network); 14 Aug 2021 21:13:24 -0000 Received: from 1ess.inri.net (216.126.196.35) by inbox.vuxu.org with ESMTPUTF8; 14 Aug 2021 21:13:24 -0000 Received: from mimir.eigenstate.org ([206.124.132.107]) by 1ess; Sat Aug 14 15:24:54 -0400 2021 Received: from abbatoir.myfiosgateway.com (pool-74-108-56-225.nycmny.fios.verizon.net [74.108.56.225]) by mimir.eigenstate.org (OpenSMTPD) with ESMTPSA id d0263ad2 (TLSv1.2:ECDHE-RSA-AES256-SHA:256:NO) for <9front@9front.org>; Sat, 14 Aug 2021 12:24:15 -0700 (PDT) Message-ID: <182597C39FCD4D67B8227458971887E3@eigenstate.org> To: 9front@9front.org Date: Sat, 14 Aug 2021 15:24:14 -0400 From: ori@eigenstate.org In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit List-ID: <9front.9front.org> List-Help: X-Glyph: ➈ X-Bullshit: optimized overflow-preventing factory-aware full-stack solution Subject: Re: [9front] git: better handling of absolute paths, regex metachars Reply-To: 9front@9front.org Precedence: bulk Quoth qwx : > git/push has a typo: `sub' instead of `subst' in the change. > .git/fs may be removed from a remote git9 repo. > > Example: > > ; git/commit . > heads/master: 72401e717205cf5864beebdcbacaefcd39ce8465 > ; git/push > deltifying 5 objects: 100% > writing 5 objects: 100% > sub: './sub' directory entry not found > sub: './sub' directory entry not found > usage: basename [-d] string [suffix] > /bin/git/push:41: > requires file > ; rcpu -u qwx -h shithub.us > cpu% cd /usr/git/qwx/qk1 > cpu% lc .git > HEAD config description info/ objects/ refs/ webpublish # shithub page now broken > > Thanks, > > qwx > Had a couple of other issues too, like sometimes leaving a '/' in $gitrel, making it '$gitwrongabs' Here's another version: --- //.git/fs/object/da085a2d4cca788686b8f68b2555040cf29dc16c/tree//sys/lib/git/common.rc +++ /sys/lib/git/common.rc @@ -11,23 +11,22 @@ exit 'usage' } -# subst [-g] this [that] -fn subst{ - awk 'BEGIN{ - global = 0 - for(i = 1; ARGV[i] ~ /^-/; i++){ - if(ARGV[i] == "-g") - global = 1 - ARGC-- - } - this = ARGV[i++]; ARGC-- - that = ARGV[i++]; ARGC-- - } +fn subst { + awk ' + BEGIN{ARGC=0} + {sub(ARGV[1], ARGV[2]); print} + ' $* +} + +fn drop { + awk ' + BEGIN{ARGC=0} { - if(global) gsub(this, that) - else sub(this, that) + if(index($0, ARGV[1]) == 1) + $0=substr($0, length(ARGV[1])+1) print - }' $* + } + ' $* } fn present { @@ -77,7 +76,7 @@ if(~ $#gitroot 0) die 'not a git repository' gitfs=$gitroot/.git/fs - gitrel=`{pwd | subst '^'$"gitroot'/?'} + gitrel=`{pwd | drop $gitroot | sed 's@^/@@'} if(~ $#gitrel 0) gitrel='.' cd $gitroot --- //.git/fs/object/da085a2d4cca788686b8f68b2555040cf29dc16c/tree/sys/src/cmd/git/add +++ sys/src/cmd/git/add @@ -16,11 +16,11 @@ if(~ $#* 0) exec aux/usage -paths=`$nl{cleanname -d $gitrel $*} +paths=`$nl{cleanname -d $gitrel $* | drop $gitroot} if(~ $add tracked) - files=`$nl{walk -f $paths} + files=`$nl{walk -f ./$paths} if not - files=`$nl{cd .git/index9/tracked/ && walk -f $paths} + files=`$nl{cd .git/index9/tracked/ && walk -f ./$paths} for(f in $files){ if(! ~ `$nl{cleanname $f} .git/*){ --- //.git/fs/object/da085a2d4cca788686b8f68b2555040cf29dc16c/tree/sys/src/cmd/git/clone +++ sys/src/cmd/git/clone @@ -7,7 +7,7 @@ if(~ $debug 1) debug=(-d) -remote=`{echo $1 | subst -g '/*$'} +remote=`{echo $1 | sed 's@/*$@@'} local=$2 if(~ $#remote 0) @@ -79,7 +79,7 @@ tree=.git/fs/HEAD/tree lbranch=`{git/branch} - rbranch=`{echo $lbranch | subst '^heads' 'remotes/origin'} + rbranch=`{echo $lbranch | subst 'heads' 'remotes/origin'} echo checking out repository... if(test -f .git/refs/$rbranch){ cp .git/refs/$rbranch .git/refs/$lbranch @@ -86,12 +86,10 @@ git/fs @ {builtin cd $tree && tar cif /fd/1 .} | @ {tar xf /fd/0} \ || die 'checkout failed:' $status - for(f in `$nl{walk -f $tree | subst '^'$tree'/*'}){ - if(! ~ $#f 0){ - idx=.git/index9/tracked/$f - mkdir -p `$nl{basename -d $idx} - walk -eq $f > $idx - } + for(f in `$nl{walk -f $tree | drop $tree}){ + idx=.git/index9/tracked/$f + mkdir -p `$nl{basename -d $idx} + walk -eq ./$f > $idx } } if not{ --- //.git/fs/object/da085a2d4cca788686b8f68b2555040cf29dc16c/tree/sys/src/cmd/git/merge +++ sys/src/cmd/git/merge @@ -7,13 +7,12 @@ basebr=$gitfs/object/$2/tree theirbr=$gitfs/object/$3/tree - all=`$nl{{git/query -c $1 $2; git/query -c $2 $3} | sed 's/^..//' | \ - subst -g '^('$ourbr'|'$basebr'|'$theirbr')/*' | sort | uniq} + all=`$nl{{git/query -c $1 $2; git/query -c $2 $3} | sed 's/^..//' | sort | uniq} for(f in $all){ ours=$ourbr/$f base=$basebr/$f theirs=$theirbr/$f - merge1 $f $theirs $base $ours + merge1 ./$f $theirs $base $ours } } --- //.git/fs/object/da085a2d4cca788686b8f68b2555040cf29dc16c/tree/sys/src/cmd/git/revert +++ sys/src/cmd/git/revert @@ -11,8 +11,8 @@ if(~ $#query 1) commit=`{git/query -p $query} -files=`$nl{cleanname -d $gitrel $*} -for(f in `$nl{cd $commit/tree/ && walk -f $files}){ +files=`$nl{cleanname -d $gitrel $* | drop $gitroot} +for(f in `$nl{cd $commit/tree/ && walk -f ./$files}){ mkdir -p `{basename -d $f} cp -x -- $commit/tree/$f $f git/add $f