On Tue, Feb 10, 2015 at 06:06:25PM +0000, Julian Foad wrote: > I don't have any objection to merging this to trunk. Comments from a partial > review follow. > > I'd like to repeat my request for a written description of what "pinning" > means. Specifically, the condition for an external definition to be eligible > for pinning, and in what way we change it. This should be written down > somewhere in the source tree. The doc string of svn_client_copy7() should > refer to it. > > The doc string of svn_client_copy7() should describe the restriction on a WC > copy source being a complete, single-rev tree. > > These new static functions need doc strings: > make_external_description() > resolve_pinned_externals() > queue_externals_change_path_infos() > > Please adjust svncopy.pl's help text to direct the users of its > '--pin-externals' option to try 'svn copy --pin-externals' instead (or delete > the script, but as I said before I mildly prefer keeping it for now). > > test_copy_pin_externals(): > I gather that the purpose of this test is just to check that the > 'externals_to_pin' option takes effect, not to test the full range of > possible transformations and non-transformations of external definitions, and > that's why it only covers a small sample of possible forms of definition. The > test might be much simpler if it would test the exact string format of the > resulting definitions, instead of their parsed form. The input and output > cases could then be defined next to each other in the test source code for > easier reading. You might still want to parse the definitions just to > double-check that they're parsable. > The test calls svn_wc_parse_externals_description3(canonicalize_url=TRUE) > which is declared by its doc string as inappropriate when the input contains > a repos-relative URL, which it does. > The test says it sets up "parameters for pinning 2 externals" but in fact > sets up for 3; and while one case ensures a request for '^/A/D/H' doesn't > match '^/A/D/H@1' > It lacks test cases for externals_to_pin entries that don't match any > actual definition. > It lacks test cases for externals_to_pin entries that are keyed by the > 'wrong' target path/URL but otherwise would match an actual definition. > > Do the tests cover: cases that use {DATE} format, and cases that have both > an operative rev and a peg rev? (I'm staring at the tests and not easily > seeing these.) >
Thanks for poking me on these points. I'll look into them. > Repeating something I said before, re. {DATE}: Looks like timestamp rev specs > can have an issue with ambiguous time zone. > That's a separate problem, but I wonder if converting it to a Zulu time > at this point is the right thing to do. I think not. In other words, this > code should preserve the exact textual form of the {DATE} spec. I'm not sure > if it currently does. That has been fixed in r1655872. The date string is preserved now. BTW, I don't know why the Z was in the generated date string but I don't think its intended meaning is "Zulu time". It's part of a static string in our own code (libsvn_subr/time.c): #define TIMESTAMP_FORMAT "%04d-%02d-%02dT%02d:%02d:%02d.%06dZ"