Uploaded image for project: 'Subversion'
  1. Subversion
  2. SVN-1566

mixed wc format 2 with format 1 broke in commit

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • all
    • 0.32
    • libsvn_wc
    • None

    Description

      Greg Stein described this problem in:
      
         http://www.contactor.se/~dast/svn/archive-2003-10/0948.shtml
      
      Hoo... I just ran into a fun problem here. My SVN working copy
      is set up like so:
      
        svn/
          tools/
            dev/ wc_format == 1
              iz/ wc_format == 2
      
      I've added a script to the iz/ subdirectory, along with setting
      the svn:executable property.
      
      All seems fine, now I try to commit:
      
      [gstein_at_roshi iz]$ svn commit -F ../svn-commit.tmp
      Sending iz/find-fix.py
      Adding iz/run-queries.sh
      subversion/libsvn_client/commit.c:736: (apr_err=2)
      svn: No such file or directory
      svn: Commit failed (details follow):
      subversion/libsvn_subr/io.c:237: (apr_err=2)
      svn: svn_io_copy_file: error copying
      '/home/gstein/src/svn/tools/dev/iz/.svn/props/\
        run-queries.sh' to
      '/home/gstein/src/svn/tools/dev/iz/.svn/tmp/props/\
         run-queries.sh.5.tmp'
      [gstein_at_roshi iz]$
      
      For those "in the know", they'd say, "hey! where is the
      .svn-work on that props file?" Good point. Where is it?
      Well... it appears that the commit process sees the *parent's*
      wc_format and assumes that is the format of the child. So it
      loses the .svn-work suffix and promptly barfs.
      
      To be a bit more specific, the stack looks like:
      
      svn_io_copy_file(
          "/home/gstein/src/svn/tools/dev/iz/.svn/props/\
          run-queries.sh",
          "/home/gstein/src/svn/tools/dev/iz/.svn/tmp/props/\
          run-queries.sh", ...)
      svn_wc_transmit_prop_deltas(
          "/home/gstein/src/svn/tools/dev/iz/run-queries.sh", ...)
      do_item_commit(...)
      path_driver_cb_func(...)
      svn_delta_path_driver(...)
      svn_client__do_commit(...)
      
      The problematic code is svn_wc_transmit_prop_deltas() where it
      calls svn_wc__prop_path(). It passes an adm_access that
      corresponds to the parent directory, rather than the dir for
      'path'. The underlying __prop_path() code doesn't take this
      into account when it builds the path (which also includes a
      test of the wc_format).
      
      I'm not familiar enough with this area to know how to fix up
      that svn_wc__adm_wc_format call in
      adm_files::prop_path_internal().
      
      While it is certainly possible to say, "bah. that happens only
      to people with an old wc format directory," then I'd respond
      with "if our format stuff doesn't work, then why bother?"
      
      I suspect the answer is to open a new access baton from the
      given access baton, then use that appropriately. I'm just not
      sure of the implications around that, or the best layer of the
      onion to do that at.
      

      Attachments

        Activity

          People

            Unassigned Unassigned
            kfogel Karl Fogel
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: