On 25.05.2012 10:54, Philip Martin wrote:
Stefan Küng<tortoise...@gmail.com>  writes:

libsvn_tsvn32!svn_relpath_join+0x10
libsvn_tsvn32!svn_wc__internal_get_origin+0x1b2
libsvn_tsvn32!svn_client_commit5+0x14d3
libsvn_tsvn32!svn_client__harvest_committables+0x26a
libsvn_tsvn32!svn_client_commit5+0x2e4

here the 'status' after svn_wc__db_scan_addition() is
svn_wc__db_status_incomplete which might be an indication why
original_repos_relpath is NULL and then causes the access violation in
svn_relpath_join().

One way to get incomplete with status add is to interrupt a wc-to-wc
copy.  That gives things like:

$ svn st wc
A  +    wc/X
!       wc/X/B
!       wc/X/f

But those have original_repos_relpath and the commit doesn't crash.

Is there some other way of getting incomplete with add?  Perhaps an
interrupted merge?

No idea how the wc got into this state. As I said: this comes from a crash dump. All I can see is the stack trace and some of the variables passed to the functions in the stack trace.


The documentation for svn_wc__node_get_origin says that for an added
node (meaning not copied) the function returns NULL.  This indicates
that callers are probably not going to crash if we return NULL for the
incomplete case:

svn diff ../src-1.7/subversion/libsvn_wc/node.c
Index: ../src-1.7/subversion/libsvn_wc/node.c
===================================================================
--- ../src-1.7/subversion/libsvn_wc/node.c      (revision 1342275)
+++ ../src-1.7/subversion/libsvn_wc/node.c      (working copy)
@@ -1407,7 +1407,10 @@
              return SVN_NO_ERROR; /* Local addition */
            }

-        *repos_relpath = svn_relpath_join(
+        if (!original_repos_relpath)
+          *repos_relpath = NULL;
+        else
+          *repos_relpath = svn_relpath_join(
                                  original_repos_relpath,
                                  svn_dirent_skip_ancestor(op_root_abspath,
                                                           local_abspath),

I'd still like to be able to reproduce it.


**********

libsvn_tsvn32!svn_relpath_join+0x10
libsvn_tsvn32!svn_wc__internal_get_origin+0x1b2
libsvn_tsvn32!svn_client_diff_summarize_dup+0x56c
libsvn_tsvn32!svn_client_export5+0x1bb

no idea why here original_repos_relpath is NULL though. Maybe you have
more luck analyzing that crash dump.

Does this mean you cannot determine status in the same way you
determined status above?

Status is 0 here (normal). That's why I don't know how original_repos_relpath could be NULL.

Stefan

--
       ___
  oo  // \\      "De Chelonian Mobile"
 (_,\/ \_/ \     TortoiseSVN
   \ \_/_\_/>    The coolest Interface to (Sub)Version Control
   /_/   \_\     http://tortoisesvn.net

Reply via email to