[l10n] Translation status report for trunk r1055292

2011-01-05 Thread SVN DEV
Translation status report for tr...@r1055292

  lang   trans untrans   fuzzy obs
--
de2053 126 239 199
es1990 189 273 338
fr2141  38  75  41
it1839 340 472 162
ja1982 197 344 584
ko2027 152 187 179
nb2043 136 197 307
pl2075 104 146  82
 pt_BR1803 376 489 157
sv1759 420 513 163
 zh_CN2175   4  11  88
 zh_TW1739 440 551 225


Re: [PATCH] allow svnsync to translate non-UTF-8 log messages to UTF-8 (v. 3)

2011-01-05 Thread Julian Foad
On Sun, 2011-01-02, Daniel Shahaf wrote:
 Danny Trebbien wrote on Sun, Dec 26, 2010 at 15:39:05 -0800:
  Attached are version 3 of the patch and corresponding log message.
  Also attached is a TGZ archive of two Subversion repository dumps that
  are used by a new test case.

  [[[
  Add a command line option (--source-encoding) to the svnsync init, sync, and
  copy-revprops subcommands that allows the user to specify the character
  encoding of translatable properties from the source repository. This is 
  needed
  to allow svnsync to sync some older Subversion repositories that have
  properties that were not encoded in UTF-8.
[...]

+1 to what danielsh said.

Seems to me it would be good for the name of the command-line option to
include property, e.g. --prop-source-encoding.  I note that this
option is not intended to be used frequently so I don't imagine it's a
problem to have a long name.

  Index: subversion/svnsync/sync.h
  ===
  svnsync_normalize_revprops(apr_hash_t *rev_props,
  -   int *normalized_count,
  +   int *normalized_le_count,
  +   const char *encoding,
  apr_pool_t *pool); 
   svnsync_get_sync_editor(const svn_delta_editor_t *wrapped_editor,
   void *wrapped_edit_baton,
   svn_revnum_t base_revision,
   const char *to_url,
  +const char *prop_encoding,
   svn_boolean_t quiet,
   const svn_delta_editor_t **editor,
   void **edit_baton,
  -int *normalized_node_props_counter,
  +int *le_normalized_node_props_counter,

Can you use the same names for the counter parameters?  (I realize one
is an output and the other is an in-out, but that doesn't appear to be
the reason why they differ.)  Also we normally use EOL for end of
line; I haven't noticed the use of LE before.


Not directly related to this change, but ...

 -  int *normalized_node_props_counter;  /* Where to count normalizations? */
 +  int *le_normalized_node_props_counter;  /* Where to count line ending
 + normalizations? */
  } edit_baton_t;
 
 @@ -407,9 +425,10 @@ change_file_prop(void *file_baton,
if (svn_prop_needs_translation(name))
  {
svn_boolean_t was_normalized;

It would be a good idea to rename this variable also, otherwise this is
a bit confusing.

 -  SVN_ERR(normalize_string(value, was_normalized, pool));
 +  SVN_ERR(normalize_string(value, was_normalized, eb-prop_encoding,
 +   pool, pool));
if (was_normalized)
 -(*(eb-normalized_node_props_counter))++;
 +(*(eb-le_normalized_node_props_counter))++;
  }

This kind of code can be simplified (removing one level of indirection)
by making the baton hold the actual counter instead of a pointer to it.

- Julian




Re: diff-optimizations-bytes: how to make diff3 work with prefix/suffix scanning

2011-01-05 Thread Julian Foad
On Sat, 2011-01-01, Johan Corveleyn wrote:
 [ Taking a privately-started discussion with danielsh to the list, in
 case others have inspiration/insight about this. Question at hand: I'm
 having trouble making diff3 work with prefix/suffix scanning of the
 diff-optimizations-bytes branch. Any feedback is highly appreciated
 :-). ]
 
 On Fri, Dec 31, 2010 at 2:38 PM, Daniel Shahaf d...@daniel.shahaf.name 
 wrote:
 [...snip...]
  In diff3 with prefix enabled, I was seeing failures like this:
 
  EXPECTED:
  line1
  
  line2
  ===
  line2 modified
 
 
  ACTUAL:
  
  line1
  line2
  ===
  line1
  line2 modified
 
 
  so I assumed that when the prefix code gobbled the shared prefix.  How
  to fix it from there was purely guesswork on my part (and I haven't
  implemented it).
 
  These failures would go away if I prepended a line0 left and line0
  right to the file.
 
 Yes, I know. That's indeed because the prefix-scanning code gobbled up
 the identical prefix. That problem is also there in diff2.
 
 In diff2, I fixed this by simply pre-pending a piece of common diff
 to the diff linked list, in the function diff.c#svn_diff__diff.
 
 From r1037371:
 [[[
 --- subversion/branches/diff-optimizations-bytes/subversion/libsvn_diff/diff.c
 (original)
 +++ subversion/branches/diff-optimizations-bytes/subversion/libsvn_diff/diff.c
 Sun Nov 21 02:36:07 2010
 @@ -43,6 +43,22 @@ svn_diff__diff(svn_diff__lcs_t *lcs,
   svn_diff_t *diff;
   svn_diff_t **diff_ref = diff;
 
 +  if (want_common  (original_start  1))
 +{
 +  /* we have a prefix to skip */
 +  (*diff_ref) = apr_palloc(pool, sizeof(**diff_ref));
 +
 +  (*diff_ref)-type = svn_diff__type_common;
 +  (*diff_ref)-original_start = 0;
 +  (*diff_ref)-original_length = original_start - 1;
 +  (*diff_ref)-modified_start = 0;
 +  (*diff_ref)-modified_length = modified_start - 1;
 +  (*diff_ref)-latest_start = 0;
 +  (*diff_ref)-latest_length = 0;
 +
 +  diff_ref = (*diff_ref)-next;
 +}

Hi Johan.

I know this is work in progress but that whole if block of code is a
good example of where a comment above the block would be *really* useful
to tell the reader what it's for.  :-)

(Also, all that dereferencing is unnecessary in that particular block,
but I looked at the rest of the function and saw that that style is used
in two other blocks where it is not unnecessary.  Personally I would
find the following style more readable throughout the function:

   {
 svn_diff_t *new_diff = apr_palloc(pool, sizeof(*new_diff));
 new_diff-type = ...
 ...

 *diff_ref = new_diff;
 diff_ref = new_diff-next;
   }
)

   while (1)
 {
   if (original_start  lcs-position[0]-offset
 ]]]
 
 Naively, I wanted to do the same for diff3 (along with some other
 tricks, to make the algorithm aware of the prefix_lines), but it
 doesn't work. See the patch in attachment.
 
 I mean: it works partly: diff-diff3-test.exe passes with the attached
 patch, but merge_reintegrate_tests.py (1, 2, 10, 13 and 14) and
 merge_tests.py (61) don't. I haven't studied the test failures in
 detail (I probably should, but I currently can't wrap my head around
 those tests).
 
 I'm now pondering another approach, to pre-pend an lcs piece to the
 lcs linked list, and let the rest of the algorithm do its work as
 normal. Inspiration for this came when I was reading the code of
 diff3.c#svn_diff__resolve_conflict, where a similar trick is used
 around line 121:
 [[[
 /* If there were matching symbols at the start of
  * both sequences, record that fact.
  */
 if (common_length  0)
   {
 lcs = apr_palloc(subpool, sizeof(*lcs));
 lcs-next = NULL;
 lcs-position[0] = start_position[0];
 lcs-position[1] = start_position[1];
 lcs-length = common_length;
 
 lcs_ref = lcs-next;
   }
 ]]]
 
 Maybe I can even integrate this logic into lcs.c#svn_diff__lcs, where
 I'm already passing the prefix_lines as a new parameter. If that would
 work out, I could probably remove the special common-diff-injecting
 code in diff.c#svn_diff__diff.
 
 Thoughts?

Just from reading what you say here, that last solution sounds much
better.

- Julian


 It will take me some time/experimentation to work out the details, but
 I think that should work ...
 
 Cheers,




Re: [PATCH] make diff against copy-source by default

2011-01-05 Thread Julian Foad
On Thu, 2010-12-30, Prabhu Gnana Sundar wrote:
[...]
 After a few discussions about the inconsistent behaviour of 'svn diff'
 in different scenarios, Kamesh suggested that let 'svn diff' be done
 against the copy-source by default, making use of the copyfrom info.
 
 Now this patch would do 'diff' against the copy-source by default,
 whereas the prevailing default behaviour(of showing a *modified copy* as
 all adds) can be achieved by using the '--show-copies-as-adds'
 switch(that already exists in the code-base!).

I like this change, in principle.

We will have to decide whether it is backwards-compatible enough or
whether we need to provide an additional compatibility mode.  In order
to help us decide, it would be very useful if you could provide a
summary of the behavioural changes.  For example, maybe some tables
something like this would be a good way to summarize the changes:

Type of diff shown BEFORE this patch, WITHOUT --show-copies-as-adds:
+---+---+--+---+
|   | copied only   | copied and modified  | ...   |
+---+---+--+---+
|   |   |  |   |
|  WC-WC diff   |   |  |   |
|   |   |  |   |
|  WC-repo diff |   |  |   |
|   |   |  |   |
|  repo-repo diff   |   |  |   |
|   |   |  |   |
+---+---+--+---+

Type of diff shown BEFORE this patch, WITH --show-copies-as-adds:
+---+---+--+---+

Type of diff shown AFTER this patch, WITHOUT --show-copies-as-adds:
+---+---+--+---+

Type of diff shown AFTER this patch, WITH --show-copies-as-adds:
+---+---+--+---+

Or whatever rows and columns best convey the information.

Are there any differences with different (old) versions of Subversion
server?  (I seem to recall that copy-from data was not always supplied,
but I am not sure of the details.)


 I was quickly in to it and after spending some time in the process I
 came to know that several existing 'test cases' *failed* due to the
 change in the behaviour of the 'svn diff'. Later found that the 'wc
 editor' needs to be taught to handle this behaviour (handling the
 copyfrom info and retrieving it from the repository as against working
 copy text-base).
 
 This took quite some amount of time... 
 
 See [1] below of the mailer.py usecase which tries to get the same
 output as my patch do.
 
 May be that's the behaviour of the 'diff' that is prefered ? :)
 
 I have attached the patch and the log message with this mail. Please
 review and respond.

I only had a very quick look at the patch.  The first thing that catches
my eye is this:

 * subversion/libsvn_wc/diff.c
   (): included the svn_ra.h header file.
   (): persisted the ra_session, copyfrom file, copyfrom path and pristine 
 properties
   in the edit_baton.
   (make_edit_baton) : introduced the ra_session.
   (get_file_from_ra): newly added to fetch file from repository.
   (add_file): support copyfrom by making use of the copyfrom info.
   (apply_textdelta) : makes use of the copyfrom_temp file making use of the
   copyfrom info.
   (close_file)  : makes use of the copyfrom info and tweaked the 
 file_changed to
   display the copyfrom revision number.
   (svn_wc_get_diff_editor6) : introduced the ra_session.
   pass NULL for ra_session to make_edit_baton.

Isn't it a layering violation for libsvn_wc to know about libsvn_ra?
Maybe this needs to use callbacks or something, so that all the RA
knowledge remains in libsvn_client.

- Julian




[PATCH] '--version --quiet' should display only the version info in svnadmin, svnlook, svnsync, svndumpfilter, svnversion, svnserve

2011-01-05 Thread Prabhu Gnana Sundar
Hi all,

Currently svnadmin, svnlook, svnsync, svndumpfilter, svnversion,
svnserve show the entire version information even if '--version --quiet'
is given as command.

The '--quiet' option has *not* been handled so far.

This patch would make svnadmin, svnlook, svnsync, svndumpfilter,
svnversion, svnserve '--version --quiet' to display *only* the version
number(info) just like 'svn --version --quiet' does.

I have attached the patch and the log message with this mail. Please
give your views on this.


Thanks and regards
Prabhu
[[[
svnadmin, svnlook, svnserve, svnversion, svnsync, svndumpfilter, svnrdump would now show the version documentation in quiet mode similar to 'svn'.

* subversion/svndumpfilter/main.c
  (subcommand_help): now accepts the 'quiet' option.
  (main): added a 'break' statement.
  help subcommand handles the '--quiet' option along with '--version'.

* subversion/svnversion/main.c
  (version): accepts the 'quiet' option and displays the version in quiet mode also.
  (main)   : added booleans 'quiet' and 'is_version'.
 added 'quiet' to the 'options'.
 handles the 'quiet' case.

* subversion/svnadmin/main.c
  (subcommand_help): handles the 'quiet' option.
  (main): help subcommand handles the '--quiet' option along with '--version'.

* subversion/svnlook/main.c
  (): added 'quiet' to the 'options_table'.
  (struct svnlook_opt_state): added boolean 'quiet'.
  (subcommand_help): handles the 'quiet' option.
  (main): handled the 'quiet' case.
  help subcommand handles the '--quiet' option along with '--version'.

* subversion/svnsync/main.c
  (help_cmd): handles the 'quiet' option.
  (main): help subcommand handles the '--quiet' option along with '--version'.

* subversion/svnserve/main.c
  (): added 'quiet' to the svnserve__options.
  (version): now accepts 'quiet' argument and handles the 'quiet' option.
  (main): added booleans 'quiet' and 'is_version'.
  handles the 'quiet' case.
  pass the 'quiet' option to version() function.

* subversion/svnrdump/svnrdump.c
  (version): now accepts the 'baton' argument.
 svn_opt_print_help3() function handles the 'quiet' option.
  (main): help subcommand handles the '--quiet' option along with '--version'.



Patch by: Prabhu Gnana Sundar prabhugs{_AT_}collab.net
Suggested by: Kamesh Jayachandran kamesh{_AT_}collab.net
]]]
Index: subversion/svndumpfilter/main.c
===
--- subversion/svndumpfilter/main.c	(revision 1055432)
+++ subversion/svndumpfilter/main.c	(working copy)
@@ -1054,7 +1054,7 @@
 
   SVN_ERR(svn_opt_print_help3(os, svndumpfilter,
   opt_state ? opt_state-version : FALSE,
-  FALSE, NULL,
+  opt_state ? opt_state-quiet : FALSE, NULL,
   header, cmd_table, options_table, NULL,
   NULL, pool));
 
@@ -1336,6 +1336,7 @@
   break;
 case svndumpfilter__version:
   opt_state.version = TRUE;
+  break;
 case svndumpfilter__quiet:
   opt_state.quiet = TRUE;
   break;
@@ -1385,6 +1386,7 @@
   static const svn_opt_subcommand_desc2_t pseudo_cmd =
 { --version, subcommand_help, {0}, ,
   {svndumpfilter__version,  /* must accept its own option */
+   svndumpfilter__quiet,
   } };
 
   subcommand = pseudo_cmd;
Index: subversion/svnversion/main.c
===
--- subversion/svnversion/main.c	(revision 1055432)
+++ subversion/svnversion/main.c	(working copy)
@@ -32,9 +32,9 @@
 
 
 static svn_error_t *
-version(apr_pool_t *pool)
+version(svn_boolean_t quiet, apr_pool_t *pool)
 {
-  return svn_opt_print_help3(NULL, svnversion, TRUE, FALSE, NULL, NULL,
+  return svn_opt_print_help3(NULL, svnversion, TRUE, quiet, NULL, NULL,
  NULL, NULL, NULL, NULL, pool);
 }
 
@@ -128,6 +128,8 @@
   apr_getopt_t *os;
   svn_node_kind_t kind;
   svn_wc_context_t *wc_ctx;
+  svn_boolean_t quiet = FALSE;
+  svn_boolean_t is_version = FALSE;
   const apr_getopt_option_t options[] =
 {
   {no-newline, 'n', 0, N_(do not output the trailing newline)},
@@ -135,6 +137,8 @@
   {help, 'h', 0, N_(display this help)},
   {version, SVNVERSION_OPT_VERSION, 0,
N_(show program version information)},
+  {quiet, 'q', 0,
+   N_(no progress (only errors) to stderr)},
   {0, 0,  0,  0}
 };
 
@@ -193,12 +197,14 @@
 case 'c':
   committed = TRUE;
   break;
+case 'q':
+  quiet = TRUE;
+  break;
 case 'h':
   help(options, pool);
   break;
 case SVNVERSION_OPT_VERSION:
-  SVN_INT_ERR(version(pool));
-  exit(0);
+  is_version = TRUE;
   

RE: Any idea why public function like svn_fspath__dirname have double __ in its name?

2011-01-05 Thread Julian Foad
On Thu, 2010-12-30, Kamesh Jayachandran wrote:
  While we've mandated that __ must be used for semi-public
  functions, we've never said that it can't be used for private ones.
 
 Kamesh is talking about public, not private, functions.  I.e., ones
 where we actually do have an ABI promise to keep.
 
 I looked at svn_error__locate last week.  It's really only useful in
 --enable-maintainer-mode, but the way it's implemented, it ends up
 being used by macros in the public (non-maintainer) ABI, so even if we
 eliminate those callers, we have to supply the function itself forever.
 I've addressed this as best we can, in r1053469.
 
 Thanks
 
 Supplying a given ABI forever is the sort of thing I thought we didn't
 have to do for __ functions.  I think that's Kamesh's question too.
 
 Yes. Following is my understanding, correct me if I am wrong.
 
 my understanding
 Any function/macro inside the header *directly* under
 subversion/include should only have a public functions(ones that
 starts with svn_ and do *not* have __). 
 
 If somebody differs from this convention then there should be
 *subversion dev* community independent convention here may be like
 these.
 
 * doc string of such functions(semi-public a.k.a intra library
 functions/private(should we even have such one in headers?)) should
 promptly say so in the headers.
 
 * start with __svn like we see in some of the libc headers. The vague
 __ starting would signal about the scope/ABI nature of the API.
 
 /my understanding

I added the svn_fspath__* functions.  My understanding and my intention
is:

  * The double underscore means this function is not for public use and
does not have compatibility guarantees even though it is physically
exported.

  * Functions that are not for public use should normally be in
'subversion/include/private/*.h'.  These functions are in
'subversion/include/svn_dirent_uri.h' because they are analogous to
other functions there, but we could move them.


 With regards
 Kamesh Jayachandran
 
 [PS] Unless I am mistaken svn_fspath__* can be used in libsvn_repos
 too instead of svn_path_* wherever applicable and hence a chance to
 become public.

I don't quite understand what you mean here.

- Julian




Re: diff-optimizations-bytes: how to make diff3 work with prefix/suffix scanning

2011-01-05 Thread Johan Corveleyn
On Wed, Jan 5, 2011 at 12:11 PM, Julian Foad julian.f...@wandisco.com wrote:
 On Sat, 2011-01-01, Johan Corveleyn wrote:
 [ Taking a privately-started discussion with danielsh to the list, in
 case others have inspiration/insight about this. Question at hand: I'm
 having trouble making diff3 work with prefix/suffix scanning of the
 diff-optimizations-bytes branch. Any feedback is highly appreciated
 :-). ]

 On Fri, Dec 31, 2010 at 2:38 PM, Daniel Shahaf d...@daniel.shahaf.name 
 wrote:
 [...snip...]
  In diff3 with prefix enabled, I was seeing failures like this:
 
  EXPECTED:
  line1
  
  line2
  ===
  line2 modified
 
 
  ACTUAL:
  
  line1
  line2
  ===
  line1
  line2 modified
 
 
  so I assumed that when the prefix code gobbled the shared prefix.  How
  to fix it from there was purely guesswork on my part (and I haven't
  implemented it).
 
  These failures would go away if I prepended a line0 left and line0
  right to the file.

 Yes, I know. That's indeed because the prefix-scanning code gobbled up
 the identical prefix. That problem is also there in diff2.

 In diff2, I fixed this by simply pre-pending a piece of common diff
 to the diff linked list, in the function diff.c#svn_diff__diff.

 From r1037371:
 [[[
 --- 
 subversion/branches/diff-optimizations-bytes/subversion/libsvn_diff/diff.c
 (original)
 +++ 
 subversion/branches/diff-optimizations-bytes/subversion/libsvn_diff/diff.c
 Sun Nov 21 02:36:07 2010
 @@ -43,6 +43,22 @@ svn_diff__diff(svn_diff__lcs_t *lcs,
   svn_diff_t *diff;
   svn_diff_t **diff_ref = diff;

 +  if (want_common  (original_start  1))
 +    {
 +      /* we have a prefix to skip */
 +      (*diff_ref) = apr_palloc(pool, sizeof(**diff_ref));
 +
 +      (*diff_ref)-type = svn_diff__type_common;
 +      (*diff_ref)-original_start = 0;
 +      (*diff_ref)-original_length = original_start - 1;
 +      (*diff_ref)-modified_start = 0;
 +      (*diff_ref)-modified_length = modified_start - 1;
 +      (*diff_ref)-latest_start = 0;
 +      (*diff_ref)-latest_length = 0;
 +
 +      diff_ref = (*diff_ref)-next;
 +    }

 Hi Johan.

 I know this is work in progress but that whole if block of code is a
 good example of where a comment above the block would be *really* useful
 to tell the reader what it's for.  :-)

Ok, you're absolutely right. If I can't throw this block away (as
suggested below), I'll add some more comments.

 (Also, all that dereferencing is unnecessary in that particular block,
 but I looked at the rest of the function and saw that that style is used
 in two other blocks where it is not unnecessary.  Personally I would
 find the following style more readable throughout the function:

       {
         svn_diff_t *new_diff = apr_palloc(pool, sizeof(*new_diff));
         new_diff-type = ...
         ...

         *diff_ref = new_diff;
         diff_ref = new_diff-next;
       }
 )

Yep, that's definitely clearer. I just copy-pasted from the other
similar blocks in that function. But you're right.

Now, this style is also used in other similar places in diff3.c and
diff4.c. So if it's decided that it's best to change this to make it
more readable, I guess it should be changed in all those places
(preferably on trunk, it's not specific to the
diff-optimizations-bytes branch).

   while (1)
     {
       if (original_start  lcs-position[0]-offset
 ]]]

 Naively, I wanted to do the same for diff3 (along with some other
 tricks, to make the algorithm aware of the prefix_lines), but it
 doesn't work. See the patch in attachment.

 I mean: it works partly: diff-diff3-test.exe passes with the attached
 patch, but merge_reintegrate_tests.py (1, 2, 10, 13 and 14) and
 merge_tests.py (61) don't. I haven't studied the test failures in
 detail (I probably should, but I currently can't wrap my head around
 those tests).

 I'm now pondering another approach, to pre-pend an lcs piece to the
 lcs linked list, and let the rest of the algorithm do its work as
 normal. Inspiration for this came when I was reading the code of
 diff3.c#svn_diff__resolve_conflict, where a similar trick is used
 around line 121:
 [[[
     /* If there were matching symbols at the start of
      * both sequences, record that fact.
      */
     if (common_length  0)
       {
         lcs = apr_palloc(subpool, sizeof(*lcs));
         lcs-next = NULL;
         lcs-position[0] = start_position[0];
         lcs-position[1] = start_position[1];
         lcs-length = common_length;

         lcs_ref = lcs-next;
       }
 ]]]

 Maybe I can even integrate this logic into lcs.c#svn_diff__lcs, where
 I'm already passing the prefix_lines as a new parameter. If that would
 work out, I could probably remove the special common-diff-injecting
 code in diff.c#svn_diff__diff.

 Thoughts?

 Just from reading what you say here, that last solution sounds much
 better.

Yep. I hope to get this working soon. I did an attempt yesterday, but
ended up with causing an infinite loop somewhere/somehow, and gave up
around 2am :-). I'll 

Re: [l10n] Translation status report for trunk r1055292

2011-01-05 Thread Daniel Shahaf
How is throwing cron jobs over a wall going to cause our
translations to become written?

There have been exactly 3 po commits this month, so I'm going
to go ahead and filter these to /dev/null.

Sorry,

Daniel


SVN DEV wrote on Wed, Jan 05, 2011 at 04:26:23 +:
 Translation status report for tr...@r1055292
 
   lang   trans untrans   fuzzy obs
 --
 de2053 126 239 199
 es1990 189 273 338
 fr2141  38  75  41
 it1839 340 472 162
 ja1982 197 344 584
 ko2027 152 187 179
 nb2043 136 197 307
 pl2075 104 146  82
  pt_BR1803 376 489 157
 sv1759 420 513 163
  zh_CN2175   4  11  88
  zh_TW1739 440 551 225


Re: Bringing diff options of svnlook on par with svn?

2011-01-05 Thread Daniel Shahaf
Johan Corveleyn wrote on Wed, Jan 05, 2011 at 13:35:33 +0100:
 Hi,
 
 I'm wondering why svnlook doesn't support the same diff options (-x
 flags or others) as svn does. Is it just a question of tuits? Or there
 some specific reason why svnlook diff doesn't support '-x-p'
 (--show-c-function) and the new '--git'?
 
 If the answer is tuits, I'd like to give it a shot when I have some time.
 
 Rationale for my personal interest in this: we use svnlook diff for
 producing the diff for post-commit emails (still using a perl script,
 instead of mailer.py, because we have no python bindings installed).
 It's annoying that I can't use the -x-p option. While I'm there, it
 may be doable to also include the new --git option (don't know how
 much work etc).
 

In post-commit you can use 'svn'.  (The transaction had already been
committed and the FS layer finished his part in the show by that point;
see svn_repos_fs_commit_txn().)  Only in pre-commit are you constrained
to 'svnlook' (-t), and --- for example, considering the -x-p option ---
I suspect no one ever needed to use -x-p from pre-commit.

I'm not sure that explanation covers all the missing options, but at
least some of them.

 Cheers,
 -- 
 Johan


Re: [l10n] Translation status report for trunk r1055292

2011-01-05 Thread Daniel Shahaf
By the way, as I said on wayita: +1 to Hyrum for heading the translation
efforts; I am annoyed at having to receive mails which *for me* are
information-free (because I follow the commits@ list), not at the larger
picture of someone finally trying to make our translations move forward.

Daniel
(but I'll solve by problem by installing mail filtering on my end)


Daniel Shahaf wrote on Wed, Jan 05, 2011 at 14:44:08 +0200:
 How is throwing cron jobs over a wall going to cause our
 translations to become written?
 
 There have been exactly 3 po commits this month, so I'm going
 to go ahead and filter these to /dev/null.
 
 Sorry,
 
 Daniel
 
 
 SVN DEV wrote on Wed, Jan 05, 2011 at 04:26:23 +:
  Translation status report for tr...@r1055292
  
lang   trans untrans   fuzzy obs
  --
  de2053 126 239 199
  es1990 189 273 338
  fr2141  38  75  41
  it1839 340 472 162
  ja1982 197 344 584
  ko2027 152 187 179
  nb2043 136 197 307
  pl2075 104 146  82
   pt_BR1803 376 489 157
  sv1759 420 513 163
   zh_CN2175   4  11  88
   zh_TW1739 440 551 225


Re: svn commit: r1055462 - /subversion/trunk/subversion/tests/cmdline/dav-mirror-autocheck.sh

2011-01-05 Thread C. Michael Pilato
On 01/05/2011 09:01 AM, julianf...@apache.org wrote:
 Author: julianfoad
 Date: Wed Jan  5 14:01:56 2011
 New Revision: 1055462
 
 URL: http://svn.apache.org/viewvc?rev=1055462view=rev
 Log:
 * subversion/tests/cmdline/dav-mirror-autocheck.sh
   Set C locale so as to run all tests in a known locale. A follow-up to
   r1055065 which did the same for davautocheck.sh and svnserveautocheck.sh.

Well, there goes all the fun of chasing random environment-specific test
failures.  Thanks aLOT, Julian.  ;-)

-- 
C. Michael Pilato cmpil...@collab.net
CollabNet  www.collab.net  Distributed Development On Demand



signature.asc
Description: OpenPGP digital signature


Re: svn commit: r1055462 - /subversion/trunk/subversion/tests/cmdline/dav-mirror-autocheck.sh

2011-01-05 Thread Julian Foad
On Wed, 2011-01-05 at 09:05 -0500, C. Michael Pilato wrote:
 On 01/05/2011 09:01 AM, julianf...@apache.org wrote:
  Author: julianfoad
  Date: Wed Jan  5 14:01:56 2011
  New Revision: 1055462
  
  URL: http://svn.apache.org/viewvc?rev=1055462view=rev
  Log:
  * subversion/tests/cmdline/dav-mirror-autocheck.sh
Set C locale so as to run all tests in a known locale. A follow-up to
r1055065 which did the same for davautocheck.sh and svnserveautocheck.sh.
 
 Well, there goes all the fun of chasing random environment-specific test
 failures.  Thanks aLOT, Julian.  ;-)

Heh.  Actually, thanks to Philip for debugging and making the fix.  I
just copied it.

- Julian





Re: [PATCH] Remove redundant member skip_descendants from libsvn_wc/update_editor.c

2011-01-05 Thread Philip Martin
Philip Martin philip.mar...@wandisco.com writes:

 I'll take a look at your patch, it looks like a useful step.

Committed in r1055463.  Thanks!

-- 
Philip


Re: [PATCH] Inconsistent behavior in cat command

2011-01-05 Thread Noorul Islam K M
Noorul Islam K M noo...@collab.net writes:

 Julian Foad julian.f...@wandisco.com writes:

 On Thu, 2010-12-02, Noorul Islam K M wrote:

 Noorul Islam K M noo...@collab.net writes:
 
  When I was trying to come up with a patch for issue 3713, I observed the
  following.
 
  For example I have two files 1.txt and 2.txt in a repository located at
  file:///tmp/testrepo
 
  svn cat behaves differently for local paths and URLs. See the
  illustration below.
 
  noo...@noorul:/tmp/wc/testrepo$ svn cat 1.txt 2.txt
  1
  2
 
  A) Local non-existent target followed by existing target
 
  noo...@noorul:/tmp/wc/testrepo$ svn cat 3.txt 1.txt
  svn: warning: '/tmp/wc/testrepo/3.txt' is not under version control
  1
 
  B) Non-existent URL followed by existing URL
 
  noo...@noorul:/tmp/wc/testrepo$ svn cat ^/3.txt ^/1.txt
 
  svn: File not found: revision 1, path '/3.txt'
 
 
  In case A, even though the first target was non-existent it performs cat
  operation on the second target but in the case of B, svn errors out at
  the first failure itself.
 
  I am not sure about behavior of other svn commands which accepts
  multiple targets. When I discussed this Julian in IRC, he said a
  discussion is needed to come up with standardized behavior across svn
  commands. Any thoughts?
 
 
 Any updates?

 Hi Noorul.

 A good way to start a discussion of this sort is to:

   list the possible solutions;
   find out and describe how the other subcommands behave;

 I checked 'svn info' and it behaves the same way for both wc and URL.

   say what you think is good and bad about each possible solution;
   say which solution you think we should choose.

 That will make it much easier for readers to respond.

 I figured out that for non-existent URL path, svn_client_cat2 returns
 SVN_ERR_FS_NOT_FOUND which needs to be caught by svn_cl__try. Therefore
 I passed this code as one the arguments.

 Attached is the patch. All tests pass with this patch.

 Log

 [[[
 Make 'svn cat' not to error out when one of the URL targets do not
 exist.

 * subversion/svn/cat-cmd.c
   (svn_cl__cat): Pass SVN_ERR_FS_NOT_FOUND to svn_cl__try in order to
   catch the error, print warning and proceed with other targets.

 Patch by: Noorul Islam K M noorul{_AT_}collab.net
 ]]]

 Thanks and Regards
 Noorul

 Index: subversion/svn/cat-cmd.c
 ===
 --- subversion/svn/cat-cmd.c  (revision 1053010)
 +++ subversion/svn/cat-cmd.c  (working copy)
 @@ -78,6 +78,7 @@
 SVN_ERR_UNVERSIONED_RESOURCE,
 SVN_ERR_ENTRY_NOT_FOUND,
 SVN_ERR_CLIENT_IS_DIRECTORY,
 +   SVN_ERR_FS_NOT_FOUND,
 SVN_NO_ERROR));
  }
svn_pool_destroy(subpool);

Initially this thread was monitored by Julian and now I found out that
he is busy. It will be great if someone else can take a look at this
one.

Thanks and Regards
Noorul


Re: svn commit: r1055452 - /subversion/trunk/tools/po/l10n-report.py

2011-01-05 Thread Branko Čibej
On 05.01.2011 14:00, danie...@apache.org wrote:
 Author: danielsh
 Date: Wed Jan  5 13:00:07 2011
 New Revision: 1055452

 URL: http://svn.apache.org/viewvc?rev=1055452view=rev
 Log:
 Add some helpful headers to l10-report.py's output.

 * tools/po/l10n-report.py
   (svn:keywords): Set to 'all'.
   (_rev): New helper.
   (main): Include a couple of extra headers.

 Modified:
 subversion/trunk/tools/po/l10n-report.py   (contents, props changed)

 Modified: subversion/trunk/tools/po/l10n-report.py
 URL: 
 http://svn.apache.org/viewvc/subversion/trunk/tools/po/l10n-report.py?rev=1055452r1=1055451r2=1055452view=diff
 ==
 --- subversion/trunk/tools/po/l10n-report.py (original)
 +++ subversion/trunk/tools/po/l10n-report.py Wed Jan  5 13:00:07 2011
 @@ -1,5 +1,6 @@
  #!/usr/bin/env python
  #
 +# $Id$
  #
  # Licensed to the Apache Software Foundation (ASF) under one
  # or more contributor license agreements.  See the NOTICE file
 @@ -39,6 +40,10 @@ import os
  import re
  import subprocess
  
 +def _rev():
 +  dollar = $Revision$
 +  return int(re.findall('[0-9]+', dollar)[0]);
 +
  def usage_and_exit(errmsg=None):
  Print a usage message, plus an ERRMSG (if provided), then exit.
  If ERRMSG is provided, the usage message is printed to stderr and
 @@ -185,9 +190,16 @@ def main():
  email_to = To: %s % to_email_id
  email_sub = Subject: [l10n] Translation status report for %s r%s \
   % (branch_name, wc_version)
 +x_headers = .join([
 +  X-Mailer: l10n-report.py r%ld\n % _rev(),
 +  Reply-To: d...@subversion.apache.org\n,
 +  Mail-Followup-To: d...@subversion.apache.org\n,
 +  # 
 http://www.iana.org/assignments/auto-submitted-keywords/auto-submitted-keywords.xhtml
 +  Auto-Submitted: auto-generated\n,
 +];
  
 -msg = %s\n%s\n%s\n%s\n%s\n%s\n%s % (email_from, email_to,\
 -  email_sub, title, format_head, format_line, body)
 +msg = \n.join((email_from, email_to, email_sub, x_headers,
 +title, format_head, format_line, body))
  
  server.sendmail(email_from, email_to, msg)
  print(The report is sent to '%s' email id. % to_email_id)

RFC822 messages should properly have CRLF line endings, so I'd suggest
\r\n.join(...) for both the headers and the body.

-- Brane


Re: Diff optimizations and generating big test files

2011-01-05 Thread Philip Martin
Johan Corveleyn jcor...@gmail.com writes:

 Thanks for the script, it gives me some good inspiration.

 However, it doesn't fit well with the optimization that's currently
 being done on the diff-optimizations-bytes branch, because the
 differing lines are spread throughout the entire file.

I thought you were working on two different prefix problems, but if it's
all the same problem that's fine.  It's why I want *you* to write the
script, then I can test your patches on my machine.  When you are
thinking of replacing function calls with macros that's very much
hardware/OS/compiler specific and testing on more than one platform is
important.

-- 
Philip


Re: [PATCH] svn info - changing hard coded error message to specific one.

2011-01-05 Thread Julian Foad
On Sat, 2010-12-25, Noorul Islam K M wrote:
 Julian Foad julian.f...@wandisco.com writes:
 
  On Fri, 2010-12-24, C. Michael Pilato wrote:
 
  On 12/23/2010 07:27 AM, Julian Foad wrote:
  From IRC:
   
   Bert julianf: We changed error codes in libsvn_wc all over the place.
   I don't think we see strict error codes as part of the documented
   behavior, unless it is in the function documentation
  
  I agree with this.  Any time a specific error code is intended for use by 
  an
  API function as a specific message to the caller, we document that fact and
  that behavior becomes part of the contract.  Undocumented error codes are
  fair game for changing over time.
 
  OK, then that's fine by me too.
 
  Noorul wrote:
  Daniel Shahaf wrote:
   Why do you have to place the svn:  prefix here explicitly?
  Normally
   svn_handle_error2() would do that for you.  This is a red flag (is
   a wheel being reinvented here?) for me.
  
  We are actually consuming the error here to print it and proceed with
  the other targets.
 
  Noorul, svn_handle_error2 has a fatal flag that controls whether it
  terminates the program or not; setting fatal=FALSE would enable you to
  continue processing the other targets.  But it prints the error stack
  which is not what you want here - we want just a single error message.
 
  Try using svn_handle_warning2 instead.  That function appears to do
  almost exactly what you want here; the only differences I can see is it
  inserts warning:  before the message, which I think is perfect for
  this usage, and it doesn't print the extra \n, which is easily
  rectified.
 
 
 Please find updated patch attached. I used svn_handle_warning2 with
 svn:  as prefix because it is used in this fashion everywhere. All
 tests pass with this patch.

Thanks, Noorul.

I see that this patch contains two logically separate changes:

1. Fix the regression that svn info has stopped skipping unversioned
paths, which is caused by WC-NG producing a new error code.

2. Display the specific error message from the API instead of a generic
(Not a valid URL) or (Not a versioned resource).

I split your patch into two, and committed part 1 in r1055484 and part 2
in r1055494.

 Index: subversion/svn/info-cmd.c
 ===
 --- subversion/svn/info-cmd.c (revision 1051915)
 +++ subversion/svn/info-cmd.c (working copy)
 @@ -566,29 +566,14 @@
  {
/* If one of the targets is a non-existent URL or wc-entry,
   don't bail out.  Just warn and move on to the next target. */
 -  if (err-apr_err == SVN_ERR_UNVERSIONED_RESOURCE
 -  || err-apr_err == SVN_ERR_ENTRY_NOT_FOUND)
 +  if (err-apr_err == SVN_ERR_WC_PATH_NOT_FOUND || 
 +  err-apr_err == SVN_ERR_RA_ILLEGAL_URL)
  {
 -  SVN_ERR(svn_cmdline_fprintf
 -  (stderr, subpool,
 -   _(%s:  (Not a versioned resource)\n\n),
 -   svn_path_is_url(truepath)
 - ? truepath
 - : svn_dirent_local_style(truepath, pool)));
 +  svn_handle_warning2(stderr, err, svn: );
 +  svn_error_clear(svn_cmdline_fprintf(stderr, subpool, \n));
  }
 -  else if (err-apr_err == SVN_ERR_RA_ILLEGAL_URL)
 -{
 -  SVN_ERR(svn_cmdline_fprintf
 -  (stderr, subpool,
 -   _(%s:  (Not a valid URL)\n\n),
 -   svn_path_is_url(truepath)
 - ? truepath
 - : svn_dirent_local_style(truepath, pool)));
 -}
else
 -{
return svn_error_return(err);
 -}

I kept those braces, for symmetry with the if clause.

svn_error_clear(err);
err = NULL;


- Julian




Re: Any idea why public function like svn_fspath__dirname have double __ in its name?

2011-01-05 Thread Kamesh Jayachandran



With regards
Kamesh Jayachandran

[PS] Unless I am mistaken svn_fspath__* can be used in libsvn_repos
too instead of svn_path_* wherever applicable and hence a chance to
become public.

I don't quite understand what you mean here.



I meant subversion/libsvn_repos/commit.c:delete_entry() uses deprecated 
svn_path_join which can be made to use svn_fspath__join.


If my guess is true, we can as well make svn_fspath__join as 
svn_fspath_join and make it public as it is used by 2 modules(libsvn_fs 
and libsvn_repos).


With regards
Kamesh Jayachandran


Re: [oss-security] CVE request for subversion

2011-01-05 Thread Josh Bressers
- Original Message -
 On Tue, Jan 4, 2011 at 10:02 AM, Jan Lieskovsky jlies...@redhat.com
 wrote:
  Hello Kurt, Josh, vendors,
 
  Josh Bressers wrote:
 
  - Original Message -
 
  Unspecified vulnerability in the server component in Apache
  Subversion
  1.6.x before 1.6.15 allows remote attackers to cause a denial of
  service via unknown vectors, related to a several bug fixes,
  including two which can cause client-initiated crashes on the
  server.
 
  [1] http://svn.haxx.se/dev/archive-2010-11/0475.shtml
 
   Cc-ed Hyrum to shed more light into this one. [1] mentions two
   issues:
  begin quote
  ...
  several bug fixes, including two which can cause client-initiated
  crashes on the server.
  /end quote
 
  Further look at:
  [2] http://svn.apache.org/repos/asf/subversion/tags/1.6.15/CHANGES
 
  suggest:
 
  A, * prevent crash in mod_dav_svn when using SVNParentPath
  (r1033166)
  being the first one.
    Upstream changeset:
    http://svn.apache.org/viewvc?view=revisionrevision=1033166
 
  and after discussion with Joe Orton, Joe suggested:
 
  B, * fix server-side memory leaks triggered by 'blame -g' (r1032808)
    References:
    http://svn.haxx.se/dev/archive-2010-11/0102.shtml
    Upstream changeset:
    http://svn.apache.org/viewvc?view=revisionrevision=1032808
 
    being the second one as denial of service attack (by memory
    consumption)
  against
    svnserve.
 
  Questions:
  --
  Hyrum, could you confirm A, and B, issues are those two, mentioned
  in [2]
  to be able to cause client-initiated crashes on the server?
 
 I can confirm that A and B are the two issues mentioned in [2].
 
  I admit, this isn't obvious, so let's use CVE-2010-4539 for now.
  We can split it if needed once more information is known.
 
  Josh, since CVE-2010-4539 was assigned. Once Hyrum confirms, can
  we consider CVE-2010-4539 to be a CVE identifier for A, issue
  and request yet another / second one for B, issue?
 
 We didn't initially reserve CVEs for these vulnerabilities, but will
 be happy to update our documentation to reflect them. (See
 http://subversion.apache.org/security/ ) The two issues really are
 orthogonal, so B should probably not be included in a CVE for A.
 
 I've CC'd dev@subversion.apache.org to help coordinate advisory
 authoring.
 

OK, let's split the CVE id then.

So for 
A, * prevent crash in mod_dav_svn when using SVNParentPath (r1033166)
  Upstream changeset:
  http://svn.apache.org/viewvc?view=revisionrevision=1033166

Let's use CVE-2010-4539.

For 
B, * fix server-side memory leaks triggered by 'blame -g' (r1032808)
  References:
  http://svn.haxx.se/dev/archive-2010-11/0102.shtml
  Upstream changeset:
  http://svn.apache.org/viewvc?view=revisionrevision=1032808

Let's use CVE-2010-4644.

Thanks.

-- 
JB


Re: Any idea why public function like svn_fspath__dirname have double __ in its name?

2011-01-05 Thread C. Michael Pilato
On 01/05/2011 11:05 AM, Kamesh Jayachandran wrote:
 
 With regards
 Kamesh Jayachandran

 [PS] Unless I am mistaken svn_fspath__* can be used in libsvn_repos
 too instead of svn_path_* wherever applicable and hence a chance to
 become public.
 I don't quite understand what you mean here.
 
 
 I meant subversion/libsvn_repos/commit.c:delete_entry() uses deprecated
 svn_path_join which can be made to use svn_fspath__join.
 
 If my guess is true, we can as well make svn_fspath__join as svn_fspath_join
 and make it public as it is used by 2 modules(libsvn_fs and libsvn_repos).

Our public API is no longer defined by what needs to be used by more than
one module.  It's defined by what functionality is required by or believed
to be generally useful to third-party consumers of our libraries.

Sometimes a function is used only inside a single module.  We keep it
module-private in that case.

Sometimes a function is used by multiple modules, but isn't of any general
utility to third-party consumers.  We put it into include/private, so our
own modules can use it, but it isn't part of our published public API (which
has versioning promises and guarantees, etc.).  (The svn_fspath__* functions
might very well be examples of such functions.)

And sometimes a function is used by one or more modules, but is clearly
useful to third-party consumers of the Subversion libraries.  Those
functions live in include/ proper, and make up our public API.

-- 
C. Michael Pilato cmpil...@collab.net
CollabNet  www.collab.net  Distributed Development On Demand



signature.asc
Description: OpenPGP digital signature


Re: [PATCH] support printing changed properties in svnlook

2011-01-05 Thread Erik Johansson
Hi,

I have now redone the patch to fix some of the comments given in this
thread and I'm attaching the current working state of it so that we
can have something real to discuss around. This does not include any
changes to svnlook but have a test case to verify that it works as it
should (which it at the moment doesn't, see 10 below).

Further more, I've tried to enumerate all cases that I could think of
were properties are changed and how they should be handled. For some
of the cases I've changed my mind compared to what I've said in the
rest of the thread. Hopefully this is a complete list.

mod_props is the per node hash with properties (see svn_repos_node2_t).

1. Add node w/o props = mod_props is NULL
2. Add node w/ props = mod_props contains all props

Pretty straight-forward; mod_props contains what can be expected and
action is A for all props.

3. Delete node w/o props = mod_props is NULL
4. Delete node w/ props = mod_props is NULL

For case 4 it could be argued that mod_props should contain all props
that the node had prior to being deleted. First I thought it should,
but after thinking some more I now have the opinion that it isn't of
any real use. The node is gone after all, and it doesn't matter if the
node had e.g. svn:eol-style set or not.

5. Change (add, delete or modify) node props = mod_props contains all
changed props

Also straight-forward. Action is A, D or M depending on type of
change. Properties that haven't changed are not included in mod_props.

6. Copy (i.e. add-with-history) node w/o props = mod_props is NULL
7. Copy node w/ props = mod_props is NULL

Case 7 is somewhat similar to case 4 in that one could argue that
mod_props should contain all props that were copied with the node. But
as nothing has been changed and text_mod and prop_mod are both FALSE
in this case I think that mod_props should be NULL.

8. Copy node w/ changed props [1] = mod_props contains all changed props

In this case one or several properties are added, deleted or modified
between coping the node and committing. Unmodified props are not
included in mod_props (case 7).

9. Replace (without history) node (w/ or w/o props) with node w/o
props = mod_props is NULL

We don't include any props from the deleted node (case 3 and 4) and no
props are added for the new node (case 1).

10. Replace node (w/ or w/o props) with node w/ props = mod_props
contains all props

We don't include any props from the deleted node (case 3 and 4) but
new props are added with the new node (case 2). The test for this
fails as new props are marked as M if they existed in the deleted
node. Don't know a good solution for this yet. Suggestions welcome.

11. Replace (with history) node (w/ or w/o props) with copied node w/
or w/o props = mod_props is NULL

We don't include any props from the deleted node (case 3 and 4) nor
any props from the unmodified copy (case 6 and 7).

12. Replace node (w/ or w/o props) with copied node w/ modified props
= mod_props contains all modified props

We don't include any props from the deleted node (case 3 and 4) but
the modified props from the copied node (case 8).

// Erik

-- 
Erik Johansson
Home Page: http://ejohansson.se/
PGP Key: http://ejohansson.se/erik.asc
Index: subversion/tests/libsvn_repos/repos-test.c
===
--- subversion/tests/libsvn_repos/repos-test.c	(revision 1055565)
+++ subversion/tests/libsvn_repos/repos-test.c	(working copy)
@@ -367,6 +367,53 @@
 }
 
 
+/* Debug helper */
+static void
+node_tree_print(const svn_repos_node2_t *node,
+int indent,
+apr_pool_t *pool)
+{
+  char action;
+
+  if (!node)
+return;
+
+  /* Make bubble-up nodes have action 'r'. */
+  action = node-action;
+  if (action == 'R'  ! node-text_mod  ! node-prop_mod)
+action = 'r';
+
+  printf([%c]%*c%s: (copy %s:%ld) [%s mods text:%d prop:%d]\n,
+ action, indent + 1, ' ', node-name,
+ (node-copyfrom_path ? node-copyfrom_path : none),
+ node-copyfrom_rev,
+ svn_node_kind_to_word(node-kind),
+ node-text_mod, node-prop_mod);
+
+  if (node-mod_props)
+{
+  apr_hash_index_t *hi;
+  for (hi = apr_hash_first(pool, node-mod_props); hi;
+   hi = apr_hash_next(hi))
+{
+  const void *key;
+  void *val;
+  svn_repos_node_prop_t *prop;
+
+  apr_hash_this(hi, key, NULL, val);
+  prop = val;
+  printf(   %*c[%c] %s (copy %d)\n,
+ indent + 1 + 2, ' ', prop-action,
+ (const char *)key,
+ prop-action == 'M'  node-copyfrom_path);
+}
+}
+
+  node_tree_print(node-child, indent + 2, pool);
+  node_tree_print(node-sibling, indent, pool);
+}
+
+
 static svn_error_t *
 node_tree_delete_under_copy(const svn_test_opts_t *opts,
 apr_pool_t *pool)
@@ -448,6 +495,182 @@
 }
 
 
+static svn_error_t *
+node_tree_props(const svn_test_opts_t *opts,
+ 

problem with svnsync and repository locks...

2011-01-05 Thread Edward Ned Harvey
I have a master server, and a slave server configured with pass-thru proxy.
Off the top of my head, I believe they're both 1.6.12, but I'll double check
if that is an important detail.

 

A user at the slave site does get lock on a file.  She gets the lock
successfully.

She makes a change, tries to commit.  Commit fails because file is locked in
repository.  (What?  Yeah.)

She asked me for help, and I ensured she did NOT lock in one WC and then try
to commit from another WC.  All of these operations are happening in a
single WC, using the slave server for the URL.

She tries to unlock.  Cannot unlock because file is not locked.

She tries to lock.  File is already locked.

 

On another computer, I try to lock her file.  Cannot lock - lock belongs to
her.  (I did not force steal the lock.)

I try to unlock her file.  Cannot unlock, file is not locked.

 

I double-checked the revs of the master  slave.  Both matching (we are not
waiting for an in-progress svnsync to finish from master to slave.)

 

The workaround was this:  I made a connection directly to the master and
forced the unlock.  Then she was able to commit.

 

Clearly, the presence of a repository lock is not properly communicated
between master  slave.  I double-checked my master server configuration,
and ensured there is both a post-commit hook, and a post-revprop-change
hook.  Both of which have been working flawlessly for months.

 

If necessary, I can reproduce this in a precisely documented way.  But I
didn't document it that thoroughly yet because I didn't think that's
necessarily necessary.

 

Is this simply a bug that was accidentally overlooked in the master/slave
design?  Is it a known issue?