[PATCH] git-cvsserver: fix updates in a subdirectory

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



If you checkout using git-cvsserver then delete a subdirectory and
replace it with `cvs checkout -d`, the wrong folder name will be
written into CVS/Repository and a `cvs update` in that directory
will no longer work. Includes a test case.

Signed-off-by: Byron Bradley <byronb@xxxxxxxxxxxx>
---
 git-cvsserver.perl              |    4 ++--
 t/t9400-git-cvsserver-server.sh |   22 ++++++++++++++++++++++
 2 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/git-cvsserver.perl b/git-cvsserver.perl
index c320ee9..bb8cbc2 100755
--- a/git-cvsserver.perl
+++ b/git-cvsserver.perl
@@ -1117,9 +1117,9 @@ sub req_update
 		} else {
 		    # instruct client we're sending a file to put in this path as a new file
 		    print "Clear-static-directory $dirpart\n";
-		    print $state->{CVSROOT} . "/$state->{module}/$dirpart\n";
+		    print $state->{CVSROOT} . "/$state->{module}/$state->{prependdir}$dirpart\n";
 		    print "Clear-sticky $dirpart\n";
-		    print $state->{CVSROOT} . "/$state->{module}/$dirpart\n";
+		    print $state->{CVSROOT} . "/$state->{module}/$state->{prependdir}$dirpart\n";
 
 		    $log->debug("Creating new file 'Created $dirpart'");
 		    print "Created $dirpart\n";
diff --git a/t/t9400-git-cvsserver-server.sh b/t/t9400-git-cvsserver-server.sh
index 64f947d..201925f 100755
--- a/t/t9400-git-cvsserver-server.sh
+++ b/t/t9400-git-cvsserver-server.sh
@@ -352,6 +352,28 @@ test_expect_success 'cvs update (re-add deleted file)' \
    diff -q testfile1 ../testfile1'
 
 cd "$WORKDIR"
+test_expect_success 'cvs update (in a subdirectory)' \
+  'mkdir -p a/b &&
+   echo testfile1 >a/b/test1 &&
+   git add a/b/test1 &&
+   git commit -q -m "Add test1" &&
+   git push gitcvs.git >/dev/null &&
+   cd cvswork &&
+   GIT_CONFIG="$git_config" cvs -Q update &&
+   cd a &&
+   mv b b.bak &&
+   GIT_CONFIG="$git_config" cvs -Q update -d &&
+   test -d b &&
+   cd "$WORKDIR" &&
+   echo testfile2 >a/b/test1 &&
+   git add a/b/test1 &&
+   git commit -q -m "Add test1 again" &&
+   git push gitcvs.git >/dev/null &&
+   cd cvswork/a/b &&
+   GIT_CONFIG="$git_config" cvs -Q update &&
+   diff -q test1 "$WORKDIR/a/b/test1"'
+
+cd "$WORKDIR"
 test_expect_success 'cvs update (merge)' \
   'echo Line 0 >expected &&
    for i in 1 2 3 4 5 6 7
-- 
1.6.3.rc0.2.g8152.dirty

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]