* git-cvsserver commit trouble (unexpected end of file in client) @ 2007-10-03 11:48 Jan Wielemaker 2007-10-03 13:13 ` Jan Wielemaker ` (2 more replies) 0 siblings, 3 replies; 19+ messages in thread From: Jan Wielemaker @ 2007-10-03 11:48 UTC (permalink / raw) To: git Hi, I'm pretty new to GIT. I quickly convinced our project to move to GIT, except for one guy that wants to do Windows and CVS :-( I setup a test and the checkout works just fine, but commit from cvs doesn't work. The details: * Server: git version 1.5.3.1 compiled on SuSE 10.2, 64-bits * Client, both SuSE CVS 1.12.12 and the current WinCVS cvs.exe, so it appears irrelevant. I created a test repository from a papers directory using the sequence beloe. (P.s. isn't there a more elegant way to get to a bare shared repo from a set of files? I tried (mkdir papers.git && cd papers.git && git --bare init --shared=all), but I can't clone an empty bare repository (doesn't create anything), so I can't add to it). % cd ~/tmp/papers % git-init % git-add . % git-commit % cd /home/git % git-clone --bare --no-hardlinks ~/tmp/papers/ papers.git % cd papers.git % git-config core.sharedrepository all % chmod g+ws `find . -type d` % chmod g+w `find . -type f` Anyway, appears to work fine with GIT to clone, pull and push. Using CVS over SSH, I can checkout this just fine, creating HEAD. Now I change a file and run "cvs commit" to get: gollem (2006) 11_> cvs commit -m "test" cvs [commit aborted]: end of file from server (consult above messages if any) I enabled logging and added a few statements to git-cvsserver (line 1203) $log->info("Start git show-ref -s refs/heads/$state->{module}"); # Remember where the head was at the beginning. my $parenthash = `git show-ref -s refs/heads/$state->{module}`; $log->info("parenthash = $parenthash"); chomp $parenthash; if ($parenthash !~ /^[0-9a-f]{40}$/) { $log->warn("error 1 pserver cannot find the current HEAD of module"); exit; } Then I get this log output: ================================================================ 2007-10-03 12:25:16 : DEBUG - Temporary directory is '/tmp/XwYVFFqjyd' 2007-10-03 12:25:16 : DEBUG - req_Root : /home/git/papers.git 2007-10-03 12:25:16 : DEBUG - req_Validresponses : ok error Valid-requests Referrer Redirect Checked-in New-entry Checksum Co py-file Updated Created Update-existing Merged Patched Rcs-diff Mode Mod-time Removed Remove-entry Set-static-directory Clear -static-directory Set-sticky Clear-sticky Edit-file Template Clear-template Notified Module-expansion Wrapper-rcsOption M Mbi nary E F MT 2007-10-03 12:25:16 : DEBUG - req_validrequests 2007-10-03 12:25:16 : DEBUG - SEND : Valid-requests remove add status Entry watchers ci tag log co Modified Questionable admi n Root history valid-requests Global_option Argumentx annotate Valid-responses Unchanged Directory rlog Argument expand-modul es diff editors update 2007-10-03 12:25:16 : DEBUG - SEND : ok 2007-10-03 12:25:16 : DEBUG - req_Globaloption : -q 2007-10-03 12:25:16 : DEBUG - Argument : -m 2007-10-03 12:25:16 : DEBUG - Argument : test 2007-10-03 12:25:16 : DEBUG - Argument : -- 2007-10-03 12:25:16 : INFO - Setting prepend to '2006/' 2007-10-03 12:25:16 : DEBUG - Prepending '2006/' to state|directory 2007-10-03 12:25:16 : DEBUG - req_Directory : localdir=. repository=/home/git/papers.git/HEAD/2006 path=2006/ directory=2006/ module=HEAD 2007-10-03 12:25:16 : INFO - Received entry line '/README.txt/1.1///' => '2006/README.txt' 2007-10-03 12:25:16 : DEBUG - Argument : README.txt 2007-10-03 12:25:16 : INFO - req_ci : [NULL] 2007-10-03 12:25:16 : INFO - Lockless commit start, basing commit on '/tmp/XwYVFFqjyd/ud4uGbbUJg', index file is '/tmp/XwYVF Fqjyd/3FeXMladmb' 2007-10-03 12:25:16 : INFO - Start git show-ref -s refs/heads/HEAD 2007-10-03 12:25:16 : INFO - parenthash = 2007-10-03 12:25:16 : WARN - error 1 pserver cannot find the current HEAD of module ================================================================ I don't like the req_ci : [NULL] very much, and the last 3 lines clearly shows a problem. I checked the latest git repository of git. There is no change to git-cvsserver.perl. I'm still a bit too newbie to (and not much of a Perl programmer). Does anyone has a clue? Do I have the wrong version for something? Did I setup the repository wrongly? Thanks --- Jan ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: git-cvsserver commit trouble (unexpected end of file in client) 2007-10-03 11:48 git-cvsserver commit trouble (unexpected end of file in client) Jan Wielemaker @ 2007-10-03 13:13 ` Jan Wielemaker 2007-10-03 14:57 ` Jan Wielemaker 2007-10-03 16:11 ` Johannes Schindelin [not found] ` <200710032325.55128.wielemak@science.uva.nl> 2 siblings, 1 reply; 19+ messages in thread From: Jan Wielemaker @ 2007-10-03 13:13 UTC (permalink / raw) To: git On Wednesday 03 October 2007 13:48, Jan Wielemaker wrote: > Hi, > > I'm pretty new to GIT. I quickly convinced our project to move to GIT, > except for one guy that wants to do Windows and CVS :-( I setup a test > and the checkout works just fine, but commit from cvs doesn't work. The > details: > > * Server: git version 1.5.3.1 compiled on SuSE 10.2, 64-bits > * Client, both SuSE CVS 1.12.12 and the current WinCVS cvs.exe, > so it appears irrelevant. > > I created a test repository from a papers directory using the sequence > beloe. (P.s. isn't there a more elegant way to get to a bare shared repo > from a set of files? I tried (mkdir papers.git && cd papers.git && git > --bare init --shared=all), but I can't clone an empty bare repository > (doesn't create anything), so I can't add to it). > > % cd ~/tmp/papers > % git-init > % git-add . > % git-commit > % cd /home/git > % git-clone --bare --no-hardlinks ~/tmp/papers/ papers.git > % cd papers.git > % git-config core.sharedrepository all > % chmod g+ws `find . -type d` > % chmod g+w `find . -type f` > > Anyway, appears to work fine with GIT to clone, pull and push. Using > CVS over SSH, I can checkout this just fine, creating HEAD. Now I change > a file and run "cvs commit" to get: > > gollem (2006) 11_> cvs commit -m "test" > cvs [commit aborted]: end of file from server (consult above messages if > any) I start to get a clue. Adding a line $log->info("Heads: " . `git show-ref --heads`); I see this in the log: 2007-10-03 14:13:44 : INFO - Heads: 0b7b372d525a4fe7f662996fec9cd11b1038a6be refs/heads/master Thus, I though I created the repository the wrong way. Tried again, following the recipy of http://www.kernel.org/pub/software/scm/git/docs/cvs-migration.html: $ mkdir /pub/my-repo.git $ cd /pub/my-repo.git $ git --bare init --shared $ git --bare fetch /home/alice/myproject master:master Checked out freshly using CVS. No problem. But committing a change, nothing changed :-( The log output is exactly the same, showing only refs/heads/master. I'm starting to suspect git-cvsserver afterall, but the docs suggests it is operational for quite a while. Could someone give me a clue on what am I missed? Thanks --- Jan > I enabled logging and added a few statements to git-cvsserver (line 1203) > > $log->info("Start git show-ref -s refs/heads/$state->{module}"); > # Remember where the head was at the beginning. > my $parenthash = `git show-ref -s refs/heads/$state->{module}`; > $log->info("parenthash = $parenthash"); > chomp $parenthash; > if ($parenthash !~ /^[0-9a-f]{40}$/) { > $log->warn("error 1 pserver cannot find the current HEAD of > module"); > exit; > } > > Then I get this log output: > > ================================================================ > 2007-10-03 12:25:16 : DEBUG - Temporary directory is '/tmp/XwYVFFqjyd' > 2007-10-03 12:25:16 : DEBUG - req_Root : /home/git/papers.git > 2007-10-03 12:25:16 : DEBUG - req_Validresponses : ok error Valid-requests > Referrer Redirect Checked-in New-entry Checksum Co > py-file Updated Created Update-existing Merged Patched Rcs-diff Mode > Mod-time Removed Remove-entry Set-static-directory Clear > -static-directory Set-sticky Clear-sticky Edit-file Template Clear-template > Notified Module-expansion Wrapper-rcsOption M Mbi > nary E F MT > 2007-10-03 12:25:16 : DEBUG - req_validrequests > 2007-10-03 12:25:16 : DEBUG - SEND : Valid-requests remove add status Entry > watchers ci tag log co Modified Questionable admi > n Root history valid-requests Global_option Argumentx annotate > Valid-responses Unchanged Directory rlog Argument expand-modul > es diff editors update > 2007-10-03 12:25:16 : DEBUG - SEND : ok > 2007-10-03 12:25:16 : DEBUG - req_Globaloption : -q > 2007-10-03 12:25:16 : DEBUG - Argument : -m > 2007-10-03 12:25:16 : DEBUG - Argument : test > 2007-10-03 12:25:16 : DEBUG - Argument : -- > 2007-10-03 12:25:16 : INFO - Setting prepend to '2006/' > 2007-10-03 12:25:16 : DEBUG - Prepending '2006/' to state|directory > 2007-10-03 12:25:16 : DEBUG - req_Directory : localdir=. > repository=/home/git/papers.git/HEAD/2006 path=2006/ directory=2006/ > module=HEAD > 2007-10-03 12:25:16 : INFO - Received entry line '/README.txt/1.1///' > => '2006/README.txt' > 2007-10-03 12:25:16 : DEBUG - Argument : README.txt > 2007-10-03 12:25:16 : INFO - req_ci : [NULL] > 2007-10-03 12:25:16 : INFO - Lockless commit start, basing commit > on '/tmp/XwYVFFqjyd/ud4uGbbUJg', index file is '/tmp/XwYVF > Fqjyd/3FeXMladmb' > 2007-10-03 12:25:16 : INFO - Start git show-ref -s refs/heads/HEAD > 2007-10-03 12:25:16 : INFO - parenthash = > 2007-10-03 12:25:16 : WARN - error 1 pserver cannot find the current HEAD > of module > ================================================================ > > I don't like the req_ci : [NULL] very much, and the last 3 lines clearly > shows a problem. I checked > the latest git repository of git. There is no change to git-cvsserver.perl. > > I'm still a bit too newbie to (and not much of a Perl programmer). Does > anyone has a clue? Do I have > the wrong version for something? Did I setup the repository wrongly? > > Thanks --- Jan > > - > To unsubscribe from this list: send the line "unsubscribe git" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: git-cvsserver commit trouble (unexpected end of file in client) 2007-10-03 13:13 ` Jan Wielemaker @ 2007-10-03 14:57 ` Jan Wielemaker 0 siblings, 0 replies; 19+ messages in thread From: Jan Wielemaker @ 2007-10-03 14:57 UTC (permalink / raw) To: git On Wednesday 03 October 2007 15:13, Jan Wielemaker wrote: > $ mkdir /pub/my-repo.git > $ cd /pub/my-repo.git > $ git --bare init --shared > $ git --bare fetch /home/alice/myproject master:master > > Checked out freshly using CVS. No problem. But committing a change, > nothing changed :-( The log output is exactly the same, showing only > refs/heads/master. I'm starting to suspect git-cvsserver afterall, but > the docs suggests it is operational for quite a while. Could someone > give me a clue on what am I missed? More tests ... As it didn't like the HEAD, and insisted it only knows about master, I though what happens on cvs -d :ext:user@host:/git-repos.git co master <works fine> <edit> cvs commit Commit failed (unknown reason) :-( Logfile says: ================================================================ 2007-10-03 16:43:37 : INFO - req_ci : [NULL] 2007-10-03 16:43:37 : INFO - Lockless commit start, basing commit on '/tmp/VP2P VNHPs0/6t4xncbMoN', index file is '/tmp/VP2PVNHPs0/SO4A6pzpau' 2007-10-03 16:43:37 : INFO - Start git show-ref -s refs/heads/master 2007-10-03 16:43:37 : INFO - Heads: 0b7b372d525a4fe7f662996fec9cd11b1038a6be re fs/heads/master 2007-10-03 16:43:37 : INFO - parenthash = 0b7b372d525a4fe7f662996fec9cd11b1038a 6be 2007-10-03 16:43:37 : INFO - Created index '/tmp/VP2PVNHPs0/SO4A6pzpau' with fo r head master - exit status 0 2007-10-03 16:43:37 : INFO - Committing collections-representation.txt 2007-10-03 16:43:37 : DEBUG - rename /tmp/VP2PVNHPs0/0SfbkMq6AN collections-repr esentation.txt 2007-10-03 16:43:37 : DEBUG - chmod u+rw-x collections-representation.txt 2007-10-03 16:43:37 : INFO - Updating file 'collections-representation.txt' 2007-10-03 16:43:37 : DEBUG - Treehash : aba0f583177b3b7fca05935452de22612164a7f 3, Parenthash : 0b7b372d525a4fe7f662996fec9cd11b1038a6be 2007-10-03 16:43:37 : INFO - Commit hash : 2007-10-03 16:43:37 : WARN - Commit failed (Invalid commit hash) ================================================================ !? What happens? Is git-cvsserver completely broken and should I thus forget about GIT for now (saying we cannot deal with cvs commit is politically unacceptable in this project)? Any clue? Please help --- Jan ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: git-cvsserver commit trouble (unexpected end of file in client) 2007-10-03 11:48 git-cvsserver commit trouble (unexpected end of file in client) Jan Wielemaker 2007-10-03 13:13 ` Jan Wielemaker @ 2007-10-03 16:11 ` Johannes Schindelin 2007-10-03 18:42 ` Jan Wielemaker [not found] ` <200710032325.55128.wielemak@science.uva.nl> 2 siblings, 1 reply; 19+ messages in thread From: Johannes Schindelin @ 2007-10-03 16:11 UTC (permalink / raw) To: Jan Wielemaker; +Cc: git Hi, On Wed, 3 Oct 2007, Jan Wielemaker wrote: > 2007-10-03 12:25:16 : WARN - error 1 pserver cannot find the current > HEAD of module AFAIR we do not allow committing via pserver protocol. Might that be your problem? Ciao, Dscho ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: git-cvsserver commit trouble (unexpected end of file in client) 2007-10-03 16:11 ` Johannes Schindelin @ 2007-10-03 18:42 ` Jan Wielemaker 2007-10-03 18:55 ` Johannes Schindelin 0 siblings, 1 reply; 19+ messages in thread From: Jan Wielemaker @ 2007-10-03 18:42 UTC (permalink / raw) To: Johannes Schindelin; +Cc: git Dscho, On Wednesday 03 October 2007 18:11, Johannes Schindelin wrote: > Hi, > > On Wed, 3 Oct 2007, Jan Wielemaker wrote: > > 2007-10-03 12:25:16 : WARN - error 1 pserver cannot find the current > > HEAD of module > > AFAIR we do not allow committing via pserver protocol. Might that be your > problem? Thanks, but no. I'm using CVS over SSH. I've been looking around in git-cvsserver source a bit and it aborts quite quickly if you try a commit through pserver. I get a bit further, but it cannot find the HEAD revision for some reason and (from later message), if I try to checkout master instead of HEAD it finds the revision but I get a hash mismatch. I've tried a bit debugging this, but in 15 years CVS experience I never really needed to debug the protocol and my GIT experience is only 2 weeks old :-( My hope is I'm doing something fundamentally wrong and git-cvsserver just doesn't give a sensible error. I did setup the git repository using two different routes, one adviced in the CVS conversion manual. GIT operations work just fine, so does CVS checkout. I don't think you can to that much wrong with cvs over ssh clients, especially if checkout works just fine. Does anyone out there has a working GIT <-> CVS+SHH setup? Based on what version of GIT? Using what route to create the repository? Thanks --- Jan ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: git-cvsserver commit trouble (unexpected end of file in client) 2007-10-03 18:42 ` Jan Wielemaker @ 2007-10-03 18:55 ` Johannes Schindelin 0 siblings, 0 replies; 19+ messages in thread From: Johannes Schindelin @ 2007-10-03 18:55 UTC (permalink / raw) To: Jan Wielemaker; +Cc: git Hi, On Wed, 3 Oct 2007, Jan Wielemaker wrote: > On Wednesday 03 October 2007 18:11, Johannes Schindelin wrote: > > Hi, > > > > On Wed, 3 Oct 2007, Jan Wielemaker wrote: > > > 2007-10-03 12:25:16 : WARN - error 1 pserver cannot find the current > > > HEAD of module > > > > AFAIR we do not allow committing via pserver protocol. Might that be > > your problem? > > Thanks, but no. I'm using CVS over SSH. I've been looking around in > git-cvsserver source a bit and it aborts quite quickly if you try a > commit through pserver. I get a bit further, but it cannot find the HEAD > revision for some reason and (from later message), if I try to checkout > master instead of HEAD it finds the revision but I get a hash mismatch. Okay, another stab: is your HEAD detached? Ciao, Dscho ^ permalink raw reply [flat|nested] 19+ messages in thread
[parent not found: <200710032325.55128.wielemak@science.uva.nl>]
[parent not found: <Pine.LNX.4.64.0710032311480.28395@racer.site>]
* Re: git-cvsserver commit trouble (unexpected end of file in client) [not found] ` <Pine.LNX.4.64.0710032311480.28395@racer.site> @ 2007-10-04 7:27 ` Jan Wielemaker 2007-10-04 11:18 ` git-cvsserver commit trouble BUG+Work-around Jan Wielemaker 0 siblings, 1 reply; 19+ messages in thread From: Jan Wielemaker @ 2007-10-04 7:27 UTC (permalink / raw) To: Johannes Schindelin; +Cc: git Hi Dscho, Thanks for the comments. I'll keep in on the list, just in case there is someone else with a brilliant idea. On Thursday 04 October 2007 00:14, you wrote: > Hi, > > On Wed, 3 Oct 2007, Jan Wielemaker wrote: > > On Wednesday 03 October 2007 20:55, you wrote: > > > On Wed, 3 Oct 2007, Jan Wielemaker wrote: > > > > On Wednesday 03 October 2007 18:11, Johannes Schindelin wrote: > > > > > Hi, > > > > > > > > > > On Wed, 3 Oct 2007, Jan Wielemaker wrote: > > > > > > 2007-10-03 12:25:16 : WARN - error 1 pserver cannot find the > > > > > > current HEAD of module > > > > > > > > > > AFAIR we do not allow committing via pserver protocol. Might that > > > > > be your problem? > > > > > > > > Thanks, but no. I'm using CVS over SSH. I've been looking around in > > > > git-cvsserver source a bit and it aborts quite quickly if you try a > > > > commit through pserver. I get a bit further, but it cannot find the > > > > HEAD revision for some reason and (from later message), if I try to > > > > checkout master instead of HEAD it finds the revision but I get a > > > > hash mismatch. > > > > > > Okay, another stab: is your HEAD detached? > > > > I'm a humble git beginner, though I think *my* head is still attached > > :-) In any case, we are talking a fresh repository and I can perfectly > > well clone it as well as pull and push from the clone using GIT > > commands. How do I tell whether the HEAD is detached? > > You can tell by looking into .git/HEAD (on the side that runs the server). > If it is a 40-character hex string, the HEAD is detached. Otherwise, it > should contain something like "refs/heads/master". Its the latter, so my HEAD is still attached. I hope I understand this correctly, but browsing the docs suggests a detached head is not really a normal situation, so I'm fine. Right? > Other reasons for the failure could be: > > - your user does not have write access Definitely ok (also put an strace -o logfile git-cvsserver "$@" script around it. No alarming permission or non-existence errors). > - the uid under which git-cvsserver runs has no write access See above > - you found an error that only triggers with your repo Great! Its so damn simple and and tried with three repos created in three different ways, that I'm either extremely unlucky or many more should be faced with this or nobody uses git-cvsserver. I'm hoping for a command-by-command sequence that gets me a definitely fine repository, so at least I can see it running correctly once. Then maybe I can analyse traces in detail to see where they differ and what is wrong. Somebody? Thanks --- Jan ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: git-cvsserver commit trouble BUG+Work-around 2007-10-04 7:27 ` Jan Wielemaker @ 2007-10-04 11:18 ` Jan Wielemaker 2007-10-04 12:56 ` Johannes Schindelin 0 siblings, 1 reply; 19+ messages in thread From: Jan Wielemaker @ 2007-10-04 11:18 UTC (permalink / raw) To: git; +Cc: Johannes Schindelin >> Other reasons for the failure could be: >> >> - your user does not have write access > > Definitely ok (also put an strace -o logfile git-cvsserver "$@" script > around it. No alarming permission or non-existence errors). > >> - the uid under which git-cvsserver runs has no write access > > See above > >> - you found an error that only triggers with your repo > > Great! Its so damn simple and and tried with three repos created > in three different ways, that I'm either extremely unlucky or many > more should be faced with this or nobody uses git-cvsserver. Finally getting at what is either a bug in git-show-ref or git-cvsserver. I retried the whole lot using git-1.5.3.4: <create initial repository> % Created /home/jan/tmp/test/, added a file README with some text % git-init % git-add . % git-commit <create bare one for sharing> % cd /home/git % mkdir test.git % cd test.git % git --bare init --shared % git --bare fetch /home/jan/tmp/test master:master % git-config gitcvs.enabled 1 % git-config gitcvs.logfile `pwd`/cvs.log % touch cvs.log % chmod g+w cvs.log % chgrp -R eculture . <checkout> % export CVS_SERVER=git-cvsserver % cvs -d:ext:jan@localhost:/home/git/test.git co HEAD % cd HEAD % emacs README % cvs commit -m test cvs [commit aborted]: end of file from server (consult above messages if any) Same user, so we should not have permission rights. Indeed, the trouble is here: git-cvsserver, near line 1203: my $parenthash = `git show-ref -s refs/heads/$state->{module}`; $state->{module} is -of course- HEAD. git show-ref -s refs/heads/HEAD indeed gives no output. git show-ref -s refs/heads/master works just fine. HEAD in the repo says: gollem (test.git) 2_> cat HEAD ref: refs/heads/master I guess this link must be picked up by either git-cvsserver or git-show-ref. Right? Anyway, if I add the line marked + to git-cvsserver, cvs commit and cvs add operations appear to work (I assume only if I work on the HEAD). $ENV{GIT_INDEX_FILE} = $file_index; + $state->{module} = "master"; # Remember where the head was at the beginning. Thanks for the comments. Really worrying is that such a big flaw can be in stable git and remain their for at least 3 patch levels unnoticed. Will someone take care of this and fix it properly in the right place instead of this dirty hack? Thanks --- Jan ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: git-cvsserver commit trouble BUG+Work-around 2007-10-04 11:18 ` git-cvsserver commit trouble BUG+Work-around Jan Wielemaker @ 2007-10-04 12:56 ` Johannes Schindelin 2007-10-04 13:06 ` Jan Wielemaker 0 siblings, 1 reply; 19+ messages in thread From: Johannes Schindelin @ 2007-10-04 12:56 UTC (permalink / raw) To: Jan Wielemaker; +Cc: git Hi, On Thu, 4 Oct 2007, Jan Wielemaker wrote: > Indeed, the trouble is here: git-cvsserver, near line 1203: > > my $parenthash = `git show-ref -s refs/heads/$state->{module}`; > > $state->{module} is -of course- HEAD. git show-ref -s refs/heads/HEAD > indeed gives no output. git show-ref -s refs/heads/master works just > fine. Ah! Did you do "CVSROOT=:ext:blablub cvs co HEAD"? You should "co master". The branches in git are the modules in cvs. HEAD is too volatile, you cannot make a proper module from it (imagine for example "git checkout next" where "next" is a branch, followed by "git checkout html", where "html" is another branch). Ciao, Dscho ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: git-cvsserver commit trouble BUG+Work-around 2007-10-04 12:56 ` Johannes Schindelin @ 2007-10-04 13:06 ` Jan Wielemaker 2007-10-04 15:29 ` [PATCH/RFT] cvsserver: only allow checkout of branches Johannes Schindelin 0 siblings, 1 reply; 19+ messages in thread From: Jan Wielemaker @ 2007-10-04 13:06 UTC (permalink / raw) To: Johannes Schindelin; +Cc: git Hi Dscho, On Thursday 04 October 2007 14:56, Johannes Schindelin wrote: > On Thu, 4 Oct 2007, Jan Wielemaker wrote: > > Indeed, the trouble is here: git-cvsserver, near line 1203: > > > > my $parenthash = `git show-ref -s refs/heads/$state->{module}`; > > > > $state->{module} is -of course- HEAD. git show-ref -s refs/heads/HEAD > > indeed gives no output. git show-ref -s refs/heads/master works just > > fine. > > Ah! Did you do "CVSROOT=:ext:blablub cvs co HEAD"? Yip ... > You should "co master". The branches in git are the modules in cvs. > > HEAD is too volatile, you cannot make a proper module from it (imagine for > example "git checkout next" where "next" is a branch, followed by "git > checkout html", where "html" is another branch). Ok. Pretty sure I got literal HEAD from one of the examples somewhere ... Or, I've been blind all along. Anyway, the maintainer may consider giving an error when trying to access HEAD as a module. Would have saved about 2 days work and its unlikely I'm the last victim :-( Part of the two days is that during all the things I tried somehow messed up with master too, so the one time I tried that it failed as well :-( Anyway, case closed. On with the testing ... Thanks --- Jan ^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH/RFT] cvsserver: only allow checkout of branches 2007-10-04 13:06 ` Jan Wielemaker @ 2007-10-04 15:29 ` Johannes Schindelin 2007-10-04 16:18 ` Frank Lichtenheld ` (2 more replies) 0 siblings, 3 replies; 19+ messages in thread From: Johannes Schindelin @ 2007-10-04 15:29 UTC (permalink / raw) To: Jan Wielemaker; +Cc: Frank Lichtenheld, Martin Langhoff, git It does not make sense to check out tags or "HEAD". Noticed by Jan Wielemaker. --- On Thu, 4 Oct 2007, Jan Wielemaker wrote: > On Thursday 04 October 2007 14:56, Johannes Schindelin wrote: > > > Ah! Did you do "CVSROOT=:ext:blablub cvs co HEAD"? > > Yip ... > > > You should "co master". The branches in git are the modules > > in cvs. > > > > HEAD is too volatile, you cannot make a proper module from it > > (imagine for example "git checkout next" where "next" is a > > branch, followed by "git checkout html", where "html" is > > another branch). > > Ok. Pretty sure I got literal HEAD from one of the examples > somewhere ... Or, I've been blind all along. Anyway, the > maintainer may consider giving an error when trying to access > HEAD as a module. Would have saved about 2 days work and its > unlikely I'm the last victim :-( This patch is completely untested. Could you try it, please? If it works: Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de> Cc'ed Frank, who is de-facto maintainer (according to shortlog) and Martin, who started it all IIRC. git-cvsserver.perl | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-) diff --git a/git-cvsserver.perl b/git-cvsserver.perl index 13dbd27..869690c 100755 --- a/git-cvsserver.perl +++ b/git-cvsserver.perl @@ -770,6 +770,14 @@ sub req_co $log->debug("req_co : " . ( defined($data) ? $data : "[NULL]" ) ); + if( system("git", "rev-parse", "--verify", "refs/heads/$module" ) != 0 ) + { + $log->warn("Checkout failed: $module is not a branch"); + print "error 1 Checkout failed: $module is not a branch\n"; + chdir "/"; + exit; + } + $log->info("Checking out module '$module' ($state->{CVSROOT}) to '$checkout_path'"); $ENV{GIT_DIR} = $state->{CVSROOT} . "/"; ^ permalink raw reply related [flat|nested] 19+ messages in thread
* Re: [PATCH/RFT] cvsserver: only allow checkout of branches 2007-10-04 15:29 ` [PATCH/RFT] cvsserver: only allow checkout of branches Johannes Schindelin @ 2007-10-04 16:18 ` Frank Lichtenheld 2007-10-04 16:32 ` Johannes Schindelin 2007-10-04 17:06 ` Jan Wielemaker 2007-10-04 21:15 ` Frank Lichtenheld 2 siblings, 1 reply; 19+ messages in thread From: Frank Lichtenheld @ 2007-10-04 16:18 UTC (permalink / raw) To: Johannes Schindelin; +Cc: Jan Wielemaker, Martin Langhoff, git On Thu, Oct 04, 2007 at 04:29:04PM +0100, Johannes Schindelin wrote: > Cc'ed Frank, who is de-facto maintainer (according to shortlog) > and Martin, who started it all IIRC. > > diff --git a/git-cvsserver.perl b/git-cvsserver.perl > index 13dbd27..869690c 100755 > --- a/git-cvsserver.perl > +++ b/git-cvsserver.perl > @@ -770,6 +770,14 @@ sub req_co > > $log->debug("req_co : " . ( defined($data) ? $data : "[NULL]" ) ); > > + if( system("git", "rev-parse", "--verify", "refs/heads/$module" ) != 0 ) > + { > + $log->warn("Checkout failed: $module is not a branch"); > + print "error 1 Checkout failed: $module is not a branch\n"; > + chdir "/"; > + exit; > + } > + > $log->info("Checking out module '$module' ($state->{CVSROOT}) to '$checkout_path'"); > > $ENV{GIT_DIR} = $state->{CVSROOT} . "/"; Looks good, haven't tested it yet, though. Care to add a testcase or should I take care of that? Gruesse, -- Frank Lichtenheld <frank@lichtenheld.de> www: http://www.djpig.de/ ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH/RFT] cvsserver: only allow checkout of branches 2007-10-04 16:18 ` Frank Lichtenheld @ 2007-10-04 16:32 ` Johannes Schindelin 0 siblings, 0 replies; 19+ messages in thread From: Johannes Schindelin @ 2007-10-04 16:32 UTC (permalink / raw) To: Frank Lichtenheld; +Cc: Jan Wielemaker, Martin Langhoff, git Hi, On Thu, 4 Oct 2007, Frank Lichtenheld wrote: > On Thu, Oct 04, 2007 at 04:29:04PM +0100, Johannes Schindelin wrote: > > Cc'ed Frank, who is de-facto maintainer (according to shortlog) > > and Martin, who started it all IIRC. > > > > diff --git a/git-cvsserver.perl b/git-cvsserver.perl > > index 13dbd27..869690c 100755 > > --- a/git-cvsserver.perl > > +++ b/git-cvsserver.perl > > @@ -770,6 +770,14 @@ sub req_co > > > > $log->debug("req_co : " . ( defined($data) ? $data : "[NULL]" ) ); > > > > + if( system("git", "rev-parse", "--verify", "refs/heads/$module" ) != 0 ) > > + { > > + $log->warn("Checkout failed: $module is not a branch"); > > + print "error 1 Checkout failed: $module is not a branch\n"; > > + chdir "/"; > > + exit; > > + } > > + > > $log->info("Checking out module '$module' ($state->{CVSROOT}) to '$checkout_path'"); > > > > $ENV{GIT_DIR} = $state->{CVSROOT} . "/"; > > Looks good, haven't tested it yet, though. Care to add a testcase > or should I take care of that? I would be eternally thankful if you could add the test case, since I am really short on time. Ciao, Dscho ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH/RFT] cvsserver: only allow checkout of branches 2007-10-04 15:29 ` [PATCH/RFT] cvsserver: only allow checkout of branches Johannes Schindelin 2007-10-04 16:18 ` Frank Lichtenheld @ 2007-10-04 17:06 ` Jan Wielemaker 2007-10-04 17:18 ` Johannes Schindelin 2007-10-04 18:04 ` Frank Lichtenheld 2007-10-04 21:15 ` Frank Lichtenheld 2 siblings, 2 replies; 19+ messages in thread From: Jan Wielemaker @ 2007-10-04 17:06 UTC (permalink / raw) To: Johannes Schindelin; +Cc: Frank Lichtenheld, Martin Langhoff, git On Thursday 04 October 2007 17:29, Johannes Schindelin wrote: > It does not make sense to check out tags or "HEAD". > > Noticed by Jan Wielemaker. Thanks (though it won't bite me a second time :-) > ) + { > + $log->warn("Checkout failed: $module is not a branch"); > + print "error 1 Checkout failed: $module is not a branch\n"; There are various places where it says print "...", one that even started some suggestion on what might be wrong, but these things don't end up at a visible place when using ssh as transport. Its a good idea this one is at least in the logfile as well. Not sure, but might printing to stderr work better? Cheers --- Jan ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH/RFT] cvsserver: only allow checkout of branches 2007-10-04 17:06 ` Jan Wielemaker @ 2007-10-04 17:18 ` Johannes Schindelin 2007-10-04 18:04 ` Frank Lichtenheld 1 sibling, 0 replies; 19+ messages in thread From: Johannes Schindelin @ 2007-10-04 17:18 UTC (permalink / raw) To: Jan Wielemaker; +Cc: Frank Lichtenheld, Martin Langhoff, git Hi, On Thu, 4 Oct 2007, Jan Wielemaker wrote: > On Thursday 04 October 2007 17:29, Johannes Schindelin wrote: > > It does not make sense to check out tags or "HEAD". > > > > Noticed by Jan Wielemaker. > > Thanks (though it won't bite me a second time :-) Heh. But this is Open Source, so we can make it better for others, too. Thank you for spending so much time on this, and actually uncovering that error in cvsserver! > > ) + { > > + $log->warn("Checkout failed: $module is not a branch"); > > + print "error 1 Checkout failed: $module is not a branch\n"; > > There are various places where it says print "...", one that even > started some suggestion on what might be wrong, but these things don't > end up at a visible place when using ssh as transport. Its a good idea > this one is at least in the logfile as well. Not sure, but might > printing to stderr work better? I think not. AFAICT stderr is not visible with cvs either. I somewhat hoped that the "error 1" was an indicator to the cvs client to show the message, but that's way beyond my knowledge... Ciao, Dscho ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH/RFT] cvsserver: only allow checkout of branches 2007-10-04 17:06 ` Jan Wielemaker 2007-10-04 17:18 ` Johannes Schindelin @ 2007-10-04 18:04 ` Frank Lichtenheld 1 sibling, 0 replies; 19+ messages in thread From: Frank Lichtenheld @ 2007-10-04 18:04 UTC (permalink / raw) To: Jan Wielemaker; +Cc: Johannes Schindelin, Martin Langhoff, git On Thu, Oct 04, 2007 at 07:06:20PM +0200, Jan Wielemaker wrote: > On Thursday 04 October 2007 17:29, Johannes Schindelin wrote: > > ) + { > > + $log->warn("Checkout failed: $module is not a branch"); > > + print "error 1 Checkout failed: $module is not a branch\n"; > > There are various places where it says print "...", one that even > started some suggestion on what might be wrong, but these things don't > end up at a visible place when using ssh as transport. Its a good idea huh? $ CVS_SERVER=/home/djpig/devel/git/git-cvsserver cvs -d :ext:localhost:/home/djpig/devel/gitcvs.git/ co -d cvswork HEAD djpig@localhost's password: server doesn't support gzip-file-contents fatal: Needed a single revision Checkout failed: HEAD is not a branch Gruesse, -- Frank Lichtenheld <frank@lichtenheld.de> www: http://www.djpig.de/ ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH/RFT] cvsserver: only allow checkout of branches 2007-10-04 15:29 ` [PATCH/RFT] cvsserver: only allow checkout of branches Johannes Schindelin 2007-10-04 16:18 ` Frank Lichtenheld 2007-10-04 17:06 ` Jan Wielemaker @ 2007-10-04 21:15 ` Frank Lichtenheld 2007-10-04 21:49 ` Johannes Schindelin 2 siblings, 1 reply; 19+ messages in thread From: Frank Lichtenheld @ 2007-10-04 21:15 UTC (permalink / raw) To: Johannes Schindelin, Junio C Hamano; +Cc: Martin Langhoff, git On Thu, Oct 04, 2007 at 04:29:04PM +0100, Johannes Schindelin wrote: > diff --git a/git-cvsserver.perl b/git-cvsserver.perl > index 13dbd27..869690c 100755 > --- a/git-cvsserver.perl > +++ b/git-cvsserver.perl > @@ -770,6 +770,14 @@ sub req_co > > $log->debug("req_co : " . ( defined($data) ? $data : "[NULL]" ) ); > > + if( system("git", "rev-parse", "--verify", "refs/heads/$module" ) != 0 ) > + { > + $log->warn("Checkout failed: $module is not a branch"); > + print "error 1 Checkout failed: $module is not a branch\n"; > + chdir "/"; > + exit; > + } > + > $log->info("Checking out module '$module' ($state->{CVSROOT}) to '$checkout_path'"); > > $ENV{GIT_DIR} = $state->{CVSROOT} . "/"; I've found a problem with the patch. Since git-rev-parse will produce output (which will end up at the client and confuse it), we will have to use a fork/exec combination instead of system to be able to close STDOUT and STDERR of the child. Should I sent a patch on top of this one or as a replacement? Gruesse, -- Frank Lichtenheld <frank@lichtenheld.de> www: http://www.djpig.de/ ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH/RFT] cvsserver: only allow checkout of branches 2007-10-04 21:15 ` Frank Lichtenheld @ 2007-10-04 21:49 ` Johannes Schindelin 2007-10-04 21:55 ` Shawn O. Pearce 0 siblings, 1 reply; 19+ messages in thread From: Johannes Schindelin @ 2007-10-04 21:49 UTC (permalink / raw) To: Frank Lichtenheld; +Cc: Junio C Hamano, Martin Langhoff, git Hi, On Thu, 4 Oct 2007, Frank Lichtenheld wrote: > On Thu, Oct 04, 2007 at 04:29:04PM +0100, Johannes Schindelin wrote: > > diff --git a/git-cvsserver.perl b/git-cvsserver.perl > > index 13dbd27..869690c 100755 > > --- a/git-cvsserver.perl > > +++ b/git-cvsserver.perl > > @@ -770,6 +770,14 @@ sub req_co > > > > $log->debug("req_co : " . ( defined($data) ? $data : "[NULL]" ) ); > > > > + if( system("git", "rev-parse", "--verify", "refs/heads/$module" ) != 0 ) > > + { > > + $log->warn("Checkout failed: $module is not a branch"); > > + print "error 1 Checkout failed: $module is not a branch\n"; > > + chdir "/"; > > + exit; > > + } > > + > > $log->info("Checking out module '$module' ($state->{CVSROOT}) to '$checkout_path'"); > > > > $ENV{GIT_DIR} = $state->{CVSROOT} . "/"; > > I've found a problem with the patch. Since git-rev-parse will produce > output (which will end up at the client and confuse it), we will have to use a fork/exec > combination instead of system to be able to close STDOUT and STDERR of the child. > > Should I sent a patch on top of this one or as a replacement? Better a replacement. Otherwise I have to fly to California with a brown paper bag over my HEAD. Ciao, Dscho ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH/RFT] cvsserver: only allow checkout of branches 2007-10-04 21:49 ` Johannes Schindelin @ 2007-10-04 21:55 ` Shawn O. Pearce 0 siblings, 0 replies; 19+ messages in thread From: Shawn O. Pearce @ 2007-10-04 21:55 UTC (permalink / raw) To: Johannes Schindelin; +Cc: git Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote: > On Thu, 4 Oct 2007, Frank Lichtenheld wrote: > > > > Should I sent a patch on top of this one or as a replacement? > > Better a replacement. Otherwise I have to fly to California with a brown > paper bag over my HEAD. That may be the safer way to travel. If your head is in a bag you have no idea what sort of wait in the security line you are about to face. Or what horrible movie they are showing you on the flight both over *and* back. -- Shawn. ^ permalink raw reply [flat|nested] 19+ messages in thread
end of thread, other threads:[~2007-10-04 21:55 UTC | newest] Thread overview: 19+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2007-10-03 11:48 git-cvsserver commit trouble (unexpected end of file in client) Jan Wielemaker 2007-10-03 13:13 ` Jan Wielemaker 2007-10-03 14:57 ` Jan Wielemaker 2007-10-03 16:11 ` Johannes Schindelin 2007-10-03 18:42 ` Jan Wielemaker 2007-10-03 18:55 ` Johannes Schindelin [not found] ` <200710032325.55128.wielemak@science.uva.nl> [not found] ` <Pine.LNX.4.64.0710032311480.28395@racer.site> 2007-10-04 7:27 ` Jan Wielemaker 2007-10-04 11:18 ` git-cvsserver commit trouble BUG+Work-around Jan Wielemaker 2007-10-04 12:56 ` Johannes Schindelin 2007-10-04 13:06 ` Jan Wielemaker 2007-10-04 15:29 ` [PATCH/RFT] cvsserver: only allow checkout of branches Johannes Schindelin 2007-10-04 16:18 ` Frank Lichtenheld 2007-10-04 16:32 ` Johannes Schindelin 2007-10-04 17:06 ` Jan Wielemaker 2007-10-04 17:18 ` Johannes Schindelin 2007-10-04 18:04 ` Frank Lichtenheld 2007-10-04 21:15 ` Frank Lichtenheld 2007-10-04 21:49 ` Johannes Schindelin 2007-10-04 21:55 ` Shawn O. Pearce
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).