{"thread":{"id":"18878","subject":"[PATCH] git-cvsserver: fix updates in a subdirectory","startedAt":"2009-04-15T11:23:57Z","lastAt":"2009-04-15T11:23:57Z","messageCount":1,"participants":["Byron Bradley"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"111352","messageId":"alpine.LRH.2.00.0904151222100.885@dunsop.picochip.com","threadId":"18878","inReplyTo":null,"subject":"[PATCH] git-cvsserver: fix updates in a subdirectory","fromName":"Byron Bradley","fromEmail":"byronb@picochip.com","sentAt":"2009-04-15T11:23:57Z","receivedAt":"2009-04-15T11:23:57Z","isPatch":true,"sender":{"key":"byronb@picochip.com","avatar":null},"body":"\nIf you checkout using git-cvsserver then delete a subdirectory and\nreplace it with `cvs checkout -d`, the wrong folder name will be\nwritten into CVS/Repository and a `cvs update` in that directory\nwill no longer work. Includes a test case.\n\nSigned-off-by: Byron Bradley <byronb@picochip.com>\n---\n git-cvsserver.perl              |    4 ++--\n t/t9400-git-cvsserver-server.sh |   22 ++++++++++++++++++++++\n 2 files changed, 24 insertions(+), 2 deletions(-)\n\ndiff --git a/git-cvsserver.perl b/git-cvsserver.perl\nindex c320ee9..bb8cbc2 100755\n--- a/git-cvsserver.perl\n+++ b/git-cvsserver.perl\n@@ -1117,9 +1117,9 @@ sub req_update\n \t\t} else {\n \t\t    # instruct client we're sending a file to put in this path as a new file\n \t\t    print \"Clear-static-directory $dirpart\\n\";\n-\t\t    print $state->{CVSROOT} . \"/$state->{module}/$dirpart\\n\";\n+\t\t    print $state->{CVSROOT} . \"/$state->{module}/$state->{prependdir}$dirpart\\n\";\n \t\t    print \"Clear-sticky $dirpart\\n\";\n-\t\t    print $state->{CVSROOT} . \"/$state->{module}/$dirpart\\n\";\n+\t\t    print $state->{CVSROOT} . \"/$state->{module}/$state->{prependdir}$dirpart\\n\";\n \n \t\t    $log->debug(\"Creating new file 'Created $dirpart'\");\n \t\t    print \"Created $dirpart\\n\";\ndiff --git a/t/t9400-git-cvsserver-server.sh b/t/t9400-git-cvsserver-server.sh\nindex 64f947d..201925f 100755\n--- a/t/t9400-git-cvsserver-server.sh\n+++ b/t/t9400-git-cvsserver-server.sh\n@@ -352,6 +352,28 @@ test_expect_success 'cvs update (re-add deleted file)' \\\n    diff -q testfile1 ../testfile1'\n \n cd \"$WORKDIR\"\n+test_expect_success 'cvs update (in a subdirectory)' \\\n+  'mkdir -p a/b &&\n+   echo testfile1 >a/b/test1 &&\n+   git add a/b/test1 &&\n+   git commit -q -m \"Add test1\" &&\n+   git push gitcvs.git >/dev/null &&\n+   cd cvswork &&\n+   GIT_CONFIG=\"$git_config\" cvs -Q update &&\n+   cd a &&\n+   mv b b.bak &&\n+   GIT_CONFIG=\"$git_config\" cvs -Q update -d &&\n+   test -d b &&\n+   cd \"$WORKDIR\" &&\n+   echo testfile2 >a/b/test1 &&\n+   git add a/b/test1 &&\n+   git commit -q -m \"Add test1 again\" &&\n+   git push gitcvs.git >/dev/null &&\n+   cd cvswork/a/b &&\n+   GIT_CONFIG=\"$git_config\" cvs -Q update &&\n+   diff -q test1 \"$WORKDIR/a/b/test1\"'\n+\n+cd \"$WORKDIR\"\n test_expect_success 'cvs update (merge)' \\\n   'echo Line 0 >expected &&\n    for i in 1 2 3 4 5 6 7\n-- \n1.6.3.rc0.2.g8152.dirty\n"}]}