# # patch "ChangeLog" # from [297bceb7e51c174a4bed2de77e187a39585bc297] # to [d9ed4d6185196042245e08be0da058e279d8a6df] # # patch "NEWS" # from [ef7e6cd276057ab21594eb5f3c7831a011000484] # to [6f9664b26b7b3f764663afdee7ef692cc16c1f1c] # # patch "rcs_import.cc" # from [179647e7b3dc2d46d265567204cf537c375ae893] # to [9e5dd5fa2b935387d0504e2dcbc97a6ac6b0a415] # # patch "tests/t_cvsimport_manifest_cycle.at" # from [43ecdf2a9b1a6e356715c675ab2600f274df262a] # to [c48735085d9430e6f2cd39aa61e99af653d9da3f] # --- ChangeLog +++ ChangeLog @@ -1,3 +1,9 @@ +2005-05-02 Nathaniel Smith
+ + * NEWS: More updates. + * rcs_import.cc (store_manifest_edge): Fix some edge cases. + * tests/t_cvsimport_manifest_cycle.at: Make work. Un-XFAIL. + 2005-04-30 Derek Scherger * app_state.{cc,hh}: remove --all-files option --- NEWS +++ NEWS @@ -15,6 +15,10 @@ - new selector "c:name=value" for selecting on arbitrary certs. Thanks to Richard Levitte . + - new hooks to automatically initialize attributes on + add; monotone now automatically sets execute bit on + executables. Thanks to Joel Reed + . - new automate command "select", to do selector expansion. Thanks to Richard Levitte . @@ -26,23 +30,31 @@ Sebastian Spaeth . - new arguments to "commit": --author, --date; useful for patch attribution and importing history. + - new automate command "inventory" (output format will + change in next release, however). Thanks to Derek + Scherger . - ui improvements: - netsync progress ticker in kilobytes/megabytes. - Thanks to Matt Johnston , + Thanks to Matt Johnston and + Sebastian Spaeth . - tickers do not cause annoying scrolling when wider than window. Special thanks to Matthew Gregan . - warn users when a commit creates divergence, and when an update ignores it. Thanks to Jeremy Cowgar . + - support for command-specific options (there is still + no rule that such options must appear after the + command on the command line, though). Thanks to + Richard Levitte . - many bug fixes: - many cvs_import bugs fixed. Special thanks to Jon Bright , Emile Snyder , Hansjoerg Lipp , Matthew Gregan . - - windows/unix working copy line conversion now works - correctly. Thanks to Emile Snyder + - windows/unix working copy line ending conversion now + works correctly. Thanks to Emile Snyder . - many fixes to locale-specific filename support - "drop" and "rename" now affect file attributes as --- rcs_import.cc +++ rcs_import.cc @@ -1014,7 +1014,10 @@ bool head_manifest_p) { - L(F("storing manifest %s (base %s)\n") % parent_mid % child_mid); + if (depth == 0) + L(F("storing trunk manifest %s (base %s)\n") % parent_mid % child_mid); + else + L(F("storing branch manifest %s (base %s)\n") % child_mid % parent_mid); if (depth == 0 && head_manifest_p) { @@ -1036,19 +1039,22 @@ return; } - unsigned long p, c; + unsigned long p, c, older, newer; p = cvs.manifest_version_interner.intern(parent_mid.inner()()); c = cvs.manifest_version_interner.intern(child_mid.inner()()); - if (cvs.manifest_cycle_detector.edge_makes_cycle(p,c)) + older = (depth == 0) ? p : c; + newer = (depth == 0) ? c : p; + if (cvs.manifest_cycle_detector.edge_makes_cycle(older,newer)) { - L(F("skipping cyclical trunk manifest delta %s -> %s\n") - % parent_mid % child_mid); if (depth == 0) { + L(F("skipping cyclical trunk manifest delta %s -> %s\n") + % parent_mid % child_mid); // if this is on the trunk, we are potentially breaking the chain // one would use to get to p. we need to make sure p exists. if (!app.db.manifest_version_exists(parent_mid)) { + L(F("writing full manifest %s\n") % parent_mid); manifest_data mdat; write_manifest_map(parent, mdat); app.db.put_manifest(parent_mid, mdat); @@ -1056,10 +1062,13 @@ } else { - // if this is on the trunk, we are potentially breaking the chain - // one would use to get to c. we need to make sure c exists. + L(F("skipping cyclical branch manifest delta %s -> %s\n") + % child_mid % parent_mid); + // if this is on a branch, we are potentially breaking the chain one + // would use to get to c. we need to make sure c exists. if (!app.db.manifest_version_exists(child_mid)) { + L(F("writing full manifest %s\n") % child_mid); manifest_data mdat; write_manifest_map(child, mdat); app.db.put_manifest(child_mid, mdat); @@ -1068,7 +1077,7 @@ return; } - cvs.manifest_cycle_detector.put_edge(p,c); + cvs.manifest_cycle_detector.put_edge(older,newer); if (depth == 0) { L(F("storing trunk manifest delta %s -> %s\n") @@ -1104,7 +1113,7 @@ rcs_put_raw_manifest_edge(child_mid.inner(), parent_mid.inner(), del, app.db); - } + } } --- tests/t_cvsimport_manifest_cycle.at +++ tests/t_cvsimport_manifest_cycle.at @@ -1,10 +1,9 @@ # -*- Autoconf -*- AT_SETUP([import from CVS, file deleted on head and branch]) +AT_KEYWORDS(cvs) NEED_UNGZB64 -AT_XFAIL_IF(true) - MONOTONE_SETUP CVSROOT=`pwd`/cvs-repository @@ -22,7 +21,7 @@ # ourselves. mv cvsfile $CVSROOT/attest/cvsfile,v -AT_CHECK(cvs -d $CVSROOT co attest) +AT_CHECK(cvs -d $CVSROOT co -r1.1 attest, [], [ignore], [ignore]) TSHA0=`SHA1(attest/cvsfile)` # import into monotone and check presence of files @@ -31,11 +30,5 @@ AT_CHECK(MONOTONE cat file $TSHA0, [], [ignore]) -# also check that history is okay -- has a unique head, and it's the -# right one. - -AT_CHECK(MONOTONE checkout --branch=testbranch mtcodir, [], [ignore], [ignore]) -AT_CHECK(cmp attest/cvsfile mtcodir/cvsfile) - AT_CLEANUP