Package: svn-load
Version: 0.9-1
Severity: important
Tags: patch

Hi,

There are two related problems.

Precondition: A subversion directory which contains:
(1) a symbolic link which points to an existing directory when checked out
(2) a symbolic link which is broken when checked out

When svn-load is used to update this directory with no change on link (1),
than the message "Can't replace direcory ... with file ..." is shown.
Unfortunatly the import is _not_ aborted. It is committed in an
_inconsistent_ state. Every file manipulation until the error occured seams
ok, all later are missing. (Reason: "os.path.isdir" returns True on a link
pointing to a directory.)

When svn-load is used to update this directory with no change on link (2),
the (broken) link changes to be a normal file.

Cheers
Robert

-- System Information:
Debian Release: 4.0
  APT prefers stable
  APT policy: (990, 'stable'), (400, 'testing'), (300, 'unstable')
Architecture: i386 (i686)
Shell:  /bin/sh linked to /bin/bash
Kernel: Linux 2.6.18-6-686-bigmem
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)

Versions of packages svn-load depends on:
ii  python                       2.4.4-2     An interactive high-level object-o
ii  python-svn                   1.5.0dfsg-1 A(nother) Python interface to Subv

svn-load recommends no packages.

-- no debconf information
--- svn-load-0.9.orig/svn-load
+++ svn-load-0.9/svn-load
@@ -333,7 +334,7 @@
         for path in files + dirs:
             relpath = os.path.join(root, path)[len(dir1)+1:]
             counterpath = os.path.join(dir2, relpath)
-            if not os.path.exists(counterpath):
+            if not os.path.lexists(counterpath):
                unique.append(relpath)
 
     return unique
@@ -372,7 +373,7 @@
             fullpath = os.path.join(root, f)
             relpath = fullpath[len(newdir)+1:]
             counterpath = os.path.join(workingdir, relpath)
-            if os.path.isdir(counterpath):
+            if os.path.isdir(counterpath) and not os.path.islink(counterpath):
                 sys.stderr.write("Can't replace directory %s with file %s.\n"
                                  % (counterpath, fullpath))
                 return False

Reply via email to