# # add_file "contrib/monotone-cvs-ignore.lua" # # add_file "contrib/parse-accounting.pl" # # add_file "contrib/perf-test.sh" # # add_file "tests/t_automate_get_file.at" # # add_file "tests/t_automate_get_manifest.at" # # add_file "tests/t_automate_get_revision.at" # # add_file "tests/t_mt_ignore.at" # # add_file "tests/t_unreadable_db.at" # # patch ".mt-attrs" # from [8287c8c8f48067074ca9e114e6aec78129343f60] # to [f64f76c6bd0167f72362edd8c47724dffbe31907] # # patch "ChangeLog" # from [5387993cd1182600f3f4459588e89af64f7feb59] # to [50802639ded49c79d2f4bbfa018f0adb56206858] # # patch "Makefile.am" # from [8aefb7ba1e9e19ac619b8828bbcdd8106ee3e7fa] # to [4fdc45d300225991df7992a71cedf7936a7d76b5] # # patch "annotate.cc" # from [583bfb6d988073642e901dfa36d85c7c44c4ca37] # to [613ae82123687d6e26b088c8f769d4efe9abd3fa] # # patch "automate.cc" # from [b110377e8696e41dda47f78a8486b649b4743c5a] # to [5b96e0ff436ae87bdb8bd25121cd53a522af80d6] # # patch "basic_io.cc" # from [59d07d48475fc4a7d1a5301f162fdb7245bbab62] # to [3c575f5fd41d00730c3a0a9eafe84105fa51f28a] # # patch "botan/allocate.cpp" # from [bf95f795b13f03947041d16bae44b936d914f30d] # to [8222a5340314265755a2b79469a367158fc2f99b] # # patch "cert.cc" # from [7375c4ce0944680b0b1347414d653139f6c828c7] # to [43de7f5240b7caa27fc590630afe3ffeea0bfa0b] # # patch "commands.cc" # from [3176e0a5397306096cf3ad3da067252881ddb413] # to [55800638c9bd2da0aa48ab46d06beba1d5845c32] # # patch "configure.ac" # from [84632e90c32942348f38e80ec5d0e47baed43ad4] # to [289e0cb6ea26e1a8e515e7f81626a49e77381d69] # # patch "contrib/monotone-cvs-ignore.lua" # from [] # to [9d8fe793ab5c6f3a5c21f534ceedea2796ee58eb] # # patch "contrib/parse-accounting.pl" # from [] # to [4b8d042f81fbd18ab8efeedaf705fb5854e31e18] # # patch "contrib/perf-test.sh" # from [] # to [37672e98ef9148f8aef18ac7a520139d8de860d9] # # patch "database.cc" # from [99621dc8dd3b871fc41204945906db116111519d] # to [04b7bf7f3d9722bb194a0623a339babc83d95c74] # # patch "file_io.cc" # from [a887c87104212bab175b54ec1ceb1fa5153024e5] # to [e39a1c13030c5378ea4cb3aa9621148ce0c8fb7d] # # patch "file_io.hh" # from [f104a889390ecd8eb031a56a81862cfef3aec01a] # to [16f383f0e4eb6fa8454fce1071880f066fc69bdb] # # patch "keys.cc" # from [444db9ef45da738d82da852b28e12e3c378b6d7e] # to [cf21506cfc9735f800dccf4d1c3b575fa97bab90] # # patch "keys.hh" # from [3618c073f57fdabfaf53fbf596c4d7d324aa2be5] # to [16c620ec000b13c0ef656a92a59c18660d4c1aaf] # # patch "lua.cc" # from [60a450c0fcb35a460fdfe3a6fe4d74b5dd9612e0] # to [f8a4f1818ea770532218416cb55752238c1f3ce3] # # patch "main.cc" # from [0f905ade02dd9188922f3c04700501c6f7d4b57d] # to [ca8383ced00bdb686905f58eaeac7b1446347219] # # patch "monotone.cc" # from [eb094c5de51330e85c983f50a0f93ad8dce047eb] # to [21176c710f4d646215c27d82b55f182830d13268] # # patch "monotone.texi" # from [3abc599a9ba2f2739baafe5c4b147f7253488761] # to [b9423f2c78e69bf6307613fd2c4efc81427a92b9] # # patch "netsync.cc" # from [f3c3491e4db786749296f7f3e3b3461521191101] # to [1a08b80949f7458e7868d09b0647dbdfd2f5d645] # # patch "packet.cc" # from [ac38aac6e3209972c9417388914ddc795ed4a53a] # to [407e15cf1c485e09665a372588be2f99491a17d7] # # patch "paths.cc" # from [83dd54b6c048d9b009bbf910be0e8e4a994996c0] # to [3ea54d2be240cc811a52130f6711f3c3ae410763] # # patch "paths.hh" # from [0c935d21c18770ef295b3580e53b9171e124c80a] # to [62c42e07a3d83608626a02cf57f7148c5c66b5a2] # # patch "po/Makevars" # from [ba95e10f69eae3e0645b3146a2c70bfc991a0481] # to [9f9d9179aaa8771ab4ddd5300c063d6a2f9e2f11] # # patch "po/fr.po" # from [41fc7b72e3b2c116bdded67313dde960bae9eea4] # to [2385bcc193a5aa321863cda06106737be42a1bee] # # patch "revision.cc" # from [5a02450e4801bc630e837aa9726cfb4d36b2e3a6] # to [278be7ae9f1e835cf402808d651e5a1d1a49d72f] # # patch "sanity.cc" # from [7b3c21bc6bcc1b0b365d7ba19a1c06377a7b3cbe] # to [d43cf000a18c156b97527e0724635b050159d16d] # # patch "sanity.hh" # from [f9cefbfdafc2280724a4214c250108851a56d34d] # to [4b60e04581e65bb1426c17f8807b37ec0e7775d8] # # patch "schema.sql" # from [ac99524347304a61fe2d857bc45d1bcca73adb6e] # to [513edf45fe7238d23513b7062d965000271e2d67] # # patch "std_hooks.lua" # from [0408707bb6b97eae7f8da61af7b35364dbd5a189] # to [3aa6ea33c6bbb6e43c63dd4ff8ed353f3b9d4ce3] # # patch "tests/t_add_dot.at" # from [f7f04114039217d33e5b589f8daaf926aed40a03] # to [70227719dce0b158824f846a8f7a529a7f85dced] # # patch "tests/t_add_edge.at" # from [11b5bb7be4a2dbe66cd94999b1ec9fd1c34f5b30] # to [d0c5635df674fdc6c33d5d66a0e144398e995b04] # # patch "tests/t_add_stomp_file.at" # from [5bbd2eb4c43a8400477107da7c242e63596650b3] # to [1e74d89b26c8f9b81662ecda31737f65e9f97223] # # patch "tests/t_add_vs_commit.at" # from [92280abe24d27ced1ce60d8b8e87efc310be4550] # to [de9cf601f5c2c74d2432eb4fc0531d7a572cd673] # # patch "tests/t_annotate_branch_collision.at" # from [9109836cbf4011c18f3f9645894c2b72acd5690b] # to [261f44d7235b02fd6e7cdcbae76866f5ab60ff81] # # patch "tests/t_attributes.at" # from [0375bcb4411006f5b6c0e6a72b92b568ace844f5] # to [f9a21f085de7224b35dd7df5c1ea1ce8ae6746c2] # # patch "tests/t_automate_get_file.at" # from [] # to [57d34789ad2ede0a5233cdc4f06d0674bb2f3816] # # patch "tests/t_automate_get_manifest.at" # from [] # to [58ea47a574d79d2409180521b88dd7a311eb918e] # # patch "tests/t_automate_get_revision.at" # from [] # to [594fa8320e2c194967de5f22386809f5c9f9cc14] # # patch "tests/t_cat_file_by_name.at" # from [45f9704b56b2b74f16c5579539bc1c6f777b1e56] # to [a8bd5077ca1e36b9ce1082c3b844603afdfea3ea] # # patch "tests/t_change_empty_file.at" # from [207dd154775a8ff419370bbfd7099f118618010f] # to [692dcb0629167d5f44981d62347bfb14b50ef9a6] # # patch "tests/t_commit_message_file.at" # from [aa49a6a98a40d510813800cd39cf9ae399bef4ed] # to [447a09a7a56815e3298f30a6c84a89882340c029] # # patch "tests/t_cvsimport.at" # from [a212a3cbc77e3bd78bb0bf4aea478769c93dc6d6] # to [cdb0a29f99f219dd5c2f4ebb2f3da47003ca10d7] # # patch "tests/t_cvsimport_deleted_invar.at" # from [4ee87dff9e284fdf7abf6ca72616c55b32f39a3d] # to [f6cef14b364d39403eaf99f2a18ad255047f4ca7] # # patch "tests/t_cvsimport_drepper.at" # from [5b803327cc8752bab50ced9a0efc4ce59a5244ef] # to [99b2dc609f08a0dfa0649226a11951534ce6c743] # # patch "tests/t_cvsimport_drepper2.at" # from [530e44ff587e4ad3ce3ca95026f1990f505c8e5e] # to [6cbbd86a7d4476646de2b9db9a6bbaf199296701] # # patch "tests/t_cvsimport_manifest_cycle.at" # from [57d28d7204339cc9645554b6e5d47fd8128c46c7] # to [690f76368733c0e909bde2a46f8edea144f7569b] # # patch "tests/t_cvsimport_samelog.at" # from [e7c5ee56f45b0da54ace0fb9282c19604104610d] # to [ccac785c1ac8421e23723f4cdd9e69ce10be7e93] # # patch "tests/t_database_check.at" # from [208a81e56219fc72a6db6330841255baab90824b] # to [7cd1598d68805979e7b435a58dede713dc38ad25] # # patch "tests/t_db_kill_rev_locally.at" # from [a5043ae56c1d9ab1897594010d21b5e0851e572c] # to [dba54fa06f40b817e7123cd375b78b96f62a4d43] # # patch "tests/t_db_with_dots.at" # from [0d250a8d8d44ce0a4edd501284c2d1875df03be3] # to [69973200a20d087bb2701a5c5e8c927ae54e53d2] # # patch "tests/t_empty_id_completion.at" # from [e44949007099f908f22a84276bf5e9d1ae85cf74] # to [d7e0f49748fa33fcfa33f847b82308a84d1965bd] # # patch "tests/t_empty_path.at" # from [c3c5137146a20ad3dd354795f69b8732822f5753] # to [69085e1806dff5b9884401f0c64e02477f5a8b14] # # patch "tests/t_epoch.at" # from [532fcc6bba04a62754b4bb1d6f1e3dda9c463c9f] # to [f49f3179bd8a59fb961258f995af2b460afb4de4] # # patch "tests/t_epoch_server.at" # from [cf758cee3e08a84d727df1b43815cc30737d4190] # to [13e3ea41bf04d84ccfc2dcf5b6e4d6d6319c6241] # # patch "tests/t_epoch_unidirectional.at" # from [5b50d219fc0b011f307d074ab09336f98c121c65] # to [8a53bc343a7e48d20843b89a6e77c208de84c38c] # # patch "tests/t_erename.at" # from [3bcc3d449a1759322fc3b24971d462bb57ad4b25] # to [ef285c34d12c67627b9b6dee00c3957dbe46be12] # # patch "tests/t_existsonpath.at" # from [fc7253fa711c37e25ffdd8e0aa90a631286926f5] # to [4f555bc7a0c0f3d218a445d3fb78cdcf57147345] # # patch "tests/t_i18n_file.at" # from [d2d853d11983314f03ef8703f42f3a8c95d7cde6] # to [a788a76de1663a1ec1b9ef8d571763ed618f2b88] # # patch "tests/t_import.at" # from [fdb19cf2022139b6c5beb598d138a5e9798cb23f] # to [acd29dd84259e7d8d08e79c2567a66b78928c430] # # patch "tests/t_inodeprints_hook.at" # from [eb998935bdbf72c58d8811a635c4609680e450c1] # to [9ba633b9cd6acf2c4c7630336f4f9755e14a86ef] # # patch "tests/t_lua_includedir.at" # from [06e756a957d1d330d347970c0c32def0936c7702] # to [cfb180197cc358a2d4bf71385fa0fdc1b53058ed] # # patch "tests/t_merge2_add.at" # from [a36d4d07a745cfbbf45ef17be18bdc0b55b77c42] # to [5bd5c17172e802ab24a998462fd0dc1738b0716a] # # patch "tests/t_merge2_data.at" # from [4325798fac860cb6563fc1de63d1570d16a2fa1e] # to [198ef24b2d4ec9dfa4ba2328c403a832c7cfa4c2] # # patch "tests/t_merge_add_del.at" # from [20f850e8ede0f7c4240c1f9cb21855f151f89df2] # to [14ee39bb126bd3469017d27f471434e4429a33f9] # # patch "tests/t_movedel.at" # from [b0825386b5bb4346194fbb6348d7706a313ee3b8] # to [a3cf97dca10d5b59aeb7e995f13b2268ef1f4112] # # patch "tests/t_movepatch.at" # from [83acbd4252c65f8826dab7107d478626f32243be] # to [e7ef086e17d1348933f44acc0147cde8774450ca] # # patch "tests/t_mt_ignore.at" # from [] # to [363081d16393e1244dd4d4347c1c63f19ba54e36] # # patch "tests/t_netsync.at" # from [49202a1a3045c6f30e90cfcb4672b9df4dc7a772] # to [31e8c678b935b657624d1ca98391efc8dbf921ad] # # patch "tests/t_netsync_exclude.at" # from [5a8302a38e8e62edb41b4332822cf82458177d85] # to [92742622e126083db8509144108ae006faed4867] # # patch "tests/t_netsync_exclude_default.at" # from [11beeeb0a601ba2f06d47c89b228cdfbd3f660f9] # to [e60e806f5ae6a160048081dccff8ce46c74b8551] # # patch "tests/t_netsync_globs.at" # from [3dff1121e0e6897d4f16ed9141253806e5b65939] # to [fdc7701de9af5a193798b8a25c745d8d15b62086] # # patch "tests/t_netsync_nocerts.at" # from [fb066e2badcad62b3b9dfed65f9267ee54411b39] # to [5b1e9d87f055a58f2c7d3ee0cfaed2e185469955] # # patch "tests/t_netsync_permissions.at" # from [887e4062ab6faa6283d46f0b8dba342f898a23d0] # to [2b2fdda0e34c5c71bad5451e5acdec7416f54162] # # patch "tests/t_netsync_read_permissions.at" # from [0550bdeac357f6794dd4849b2f0c0ba05a8c6286] # to [123e1ee25ec04d06cf8b221227e1456e38af732e] # # patch "tests/t_netsync_single.at" # from [b3d48b1881c63ccb549d37726ae2d7144a856820] # to [07187540f12b7fd8cf6ad91b02225c052745a011] # # patch "tests/t_netsync_unrelated.at" # from [bdd90ebe0b092465055b16fff07ccdfe75b8f7a0] # to [e267f934990722a892df9ef39c96c3407b327f03] # # patch "tests/t_normalized_filenames.at" # from [204c06103e335f45230d94fc86ebcb686e6f7959] # to [bf31f5c1d260142de5455950615209dbd4f9c9b7] # # patch "tests/t_persistent_server_keys_2.at" # from [f974ca0aba33b2107a1fd7677ded50faa52b3a05] # to [63a6ad1e1eebabf989fa1d061cb8194614caf134] # # patch "tests/t_persistent_server_revision.at" # from [8418111484ba4aaf797db3626a697ec88f4d0f88] # to [04fe8d8a529d07a8bfbb01e999bbbb99eecb254b] # # patch "tests/t_rcfile_dir.at" # from [ef248856acc3362e65a272c54c8ce0131c3aae0f] # to [f9aa64b4b4df88b80587b24a87f1d77408a7b576] # # patch "tests/t_remerge.at" # from [83424c6866711fddcd090865370ff3f9db1a37b9] # to [e9cf7d222425e8ed9f7c10a3714af3e5bf5b143e] # # patch "tests/t_rename.at" # from [9294b9b72fc4eb10f0954f07d3a6103e0c123ab0] # to [4ec762efe273f44b4a63dcc27cb9c40b0af312b4] # # patch "tests/t_rename_dir_cross_level.at" # from [11a1751be8693f71676c8c047c1a81b0d4ed2940] # to [400f1b82f0f9594a2c6592c420a9728a9b75f250] # # patch "tests/t_renamed.at" # from [40f40d3f72061961a6c39af95641177b3289110e] # to [94f19a1bcd6feb2de88e5c4ab0133065ccb64c9a] # # patch "tests/t_scan.at" # from [5269c1fe377163e3a6743b0737e95b45e005b902] # to [b203ac2f2e3960f90effbaba0595c6681c34e386] # # patch "tests/t_set_default.at" # from [95505520a46b66a6120dae44779dbb01f16fdafb] # to [4869ee5e5dee61a59e25a34facb6f5834696651d] # # patch "tests/t_setup_existing_path.at" # from [65ed903effa04ed5e70989bf0bfd4b1938e6878f] # to [0f84f1e69ba45ca565d23fdf122d91154af1d286] # # patch "tests/t_singlecvs.at" # from [7d51de64a3015214985b09b0d744f6c22afbf986] # to [3ab763cc4821f58ecc8cea7ff0d1b8f62004c8ad] # # patch "tests/t_sticky_branch.at" # from [383e882866f67eec58c597b01605cf8233061ff0] # to [452ed835d2e831480a7fff9ef2c8b5c539bcbf85] # # patch "tests/t_unreadable_MT.at" # from [a3ed09e7bf8c01bdf42c8184a9acd1683c4a6034] # to [d732c69dc8d90926de48dd11938a48b436265012] # # patch "tests/t_unreadable_db.at" # from [] # to [c69591064c72591c66a6f5d1b34dfbae0ca6c8ef] # # patch "tests/t_update_with_pending_add.at" # from [8394d96a687a14e6dcae400383d3bef0e76d1f78] # to [357bc4be7680dd9d3a898ae914aa1c6a11a47996] # # patch "tests/t_update_with_pending_drop.at" # from [d52d3736c75a01c308500e12237edaf37e8f345f] # to [00cdc65ce50b1b3b3c54d0542653c7ec47e27072] # # patch "tests/t_update_with_pending_rename.at" # from [d6e60af87b017d9269e0c3c797c93d0a696648fc] # to [99e70ea11a371b7b400bd8f4dd1fad467f9645e4] # # patch "tests/t_versions.at" # from [91d6fb7180cd75fde30d7f5b82e29cf5feaf9277] # to [49105adca6a5a867ec44be87731651eacb8cb437] # # patch "testsuite.at" # from [3069578e5268491a6c837912613346860e6f7ea5] # to [f37b217c9d261739b96a0f8ccdc61269f1c0ee67] # # patch "ui.cc" # from [403dbf11aebf69618ecbaf53dbb87695a78cb940] # to [77a48bddc373a115f5ec6cc0077afa17a2a762d0] # # patch "ui.hh" # from [daec74ed24338ff3ee7eda12f14e7deb7aeb6473] # to [d5866bba3cc59b130fb56ba40e0780801d4314f9] # # patch "win32/fs.cc" # from [38ce311dec5f6b399c799ff10cc3e8c8dae4429c] # to [dc98eb08c96cda5ca2e73e8a29dea19cb40b00bf] # # patch "win32/inodeprint.cc" # from [b861168f4636365c587b88177629559acfad329e] # to [958ef1bcb5ee1711a55894151ed1742fa3074ddc] # # patch "win32/terminal.cc" # from [e79234a8f5c29f47deae3d84703a2792678b6e74] # to [3eb6dc1cb604200139e367919e66a7438a986a6c] # ======================================================================== --- .mt-attrs 8287c8c8f48067074ca9e114e6aec78129343f60 +++ .mt-attrs f64f76c6bd0167f72362edd8c47724dffbe31907 @@ -22,5 +22,11 @@ file "contrib/mtbrowse.sh" execute "true" + file "contrib/parse-accounting.pl" +execute "true" + + file "contrib/perf-test.sh" +execute "true" + file "debian/rules" execute "true" ======================================================================== --- ChangeLog 5387993cd1182600f3f4459588e89af64f7feb59 +++ ChangeLog 50802639ded49c79d2f4bbfa018f0adb56206858 @@ -1,3 +1,352 @@ +2005-09-07 Jim Meyering + + * tests/t_rename_dir_cross_level.at: When invoking mv to rename + a directory, do not include a trailing slash on the target -- that + is not portable. + + * Makefile.am (TESTS_ENVIRONMENT): Ensure that PATH starts with + the current directory, so we test the just-built monotone binary, + not some older version. + +2005-09-07 Benoît Dejean + + * std_hooks.lua: Don't spawn emacs with '-no-init-file'. + +2005-09-09 Matthew Gregan + + * paths.cc (save_initial_path): Default Boost's fs::path to + fs::native grammar. + * tests/t_unreadable_{db,MT}.at: Disable on Win32 for now. + * paths.cc: Consistency--use WIN32 rather than _WIN32. + * file_io.cc (walk_tree): Correct test for file existence. + +2005-09-08 Matthew Gregan + + * Makefile.am: Add '-f' argument to 'mv'; avoids build waiting on + user confirmation in some cases. + +2005-09-08 Nathaniel Smith + + * monotone.texi (Certificates): Remove mention of fcerts and + mcerts. + +2005-09-07 Benoît Dejean + + * ui.{cc,hh}: Added user_inferface::user_locale. + * sanity.hh: Made F() and FP() locale aware. + +2005-09-06 Benoît Dejean + + * monotone.cc: One more i18n string. + +2005-09-06 Benoît Dejean + + * po/fr.po: Updated French translation. + +2005-09-06 Benoît Dejean + + * commands.cc: No i18n for cert_revision_changelog. + +2005-09-06 Matthew Gregan + + * tests/t_netsync_read_permissions.at: Tweak tests so we aren't + trying to serve a bare '*'; works around test hangs due to glob + expansion sillyness on MinGW. + * tests/t_netsync_globs.at: Ditto. + * tests/t_netsync_exclude.at: Ditto. + * std_hooks.lua (ignore_file): Add Mac OS X (.DS_Store) and + Windows (desktop.ini) per-directory browser configuration files. + + +2005-09-05 Benoît Dejean + + * commands.cc: Fixed some strings (added ' around revisions). + Removed some whitespaces. + No i18n in diff output. + +2005-09-05 Benoît Dejean + + * sanity.{cc,hh}: boost::format vs. F(). Merged boost::format + and moved non-template code to sanity.cc. + +2005-09-05 Matthew Gregan + + * win32/terminal.cc (have_smart_terminal): We were returning false + in almost all circumstances; changed logic so that we at least + work when running in a cmd.exe window. + +2005-09-05 Matt Johnston + + * commands.cc (dump_diffs): don't use the terminal width to + print ===== seperators. + +2005-09-05 Matthew Gregan + + * paths.cc (find_and_go_to_working_copy): Create root and bookdir + paths as fs::native. + * main.cc: Tweak #ifdef to avoid exposing some unused SEH handling + on MinGW. + * configure.ac: Minor cleanup to Win32 configure test. + +2005-09-04 Nathaniel Smith + + * monotone.cc (options): Remove default from the help string for + --count, since none of the options listed are actually the + default. + +2005-09-04 Nathaniel Smith + + * tests/t_unreadable_db.at, testsuite.at: New test. + +2005-09-03 Nathaniel Smith + + * po/Makevars (XGETTEXT_OPTIONS): N_ != ngettext. + Add c-format flags on F() and FP() calls (only partially + successful on latter, because of bug in xgettext). + +2005-09-04 Grahame Bowland + + * commands.cc: siplify the monotone cat command + to "monotone cat [-r] FIELNAME" (as in bug #12597) + * monotone.texi: update documentation of "monotone cat" + * tests/t_add_edge.at, tests/t_cat_file_by_name.at, + tests/t_change_empty_file.at, tests/t_cvsimport.at, + tests/t_cvsimport_deleted_invar.at, tests/t_cvsimport_drepper.at, + tests/t_cvsimport_drepper2.at, tests/t_cvsimport_manifest_cycle.at, + tests/t_cvsimport_samelog.at, tests/t_database_check.at, + tests/t_db_kill_rev_locally.at, tests/t_empty_id_completion.at, + tests/t_epoch.at, tests/t_epoch_server.at, tests/t_erename.at, + tests/t_i18n_file.at, tests/t_import.at, tests/t_merge_add_del.at, + tests/t_movedel.at, tests/t_movepatch.at, tests/t_netsync.at, + tests/t_netsync_exclude.at, tests/t_netsync_exclude_default.at, + tests/t_netsync_globs.at, tests/t_netsync_nocerts.at, + tests/t_netsync_permissions.at, tests/t_netsync_read_permissions.at, + tests/t_netsync_single.at, tests/t_normalized_filenames.at, + tests/t_persistent_server_revision.at, tests/t_remerge.at, + tests/t_rename.at, tests/t_renamed.at, tests/t_scan.at, + tests/t_set_default.at, tests/t_singlecvs.at, + tests/t_update_with_pending_add.at, tests/t_update_with_pending_drop.at, + tests/t_update_with_pending_rename.at, tests/t_versions.at: + use automation interface rather than "monotone cat" + +2005-09-04 Grahame Bowland + + * ChangeLog: fix up screwed up three-way merge + +2005-09-04 Grahame Bowland + + * automate.cc, commands.cc: add "automate get_file", + "automate get_revision" and "automate get_manifest" to + automation interface. + * monotone.texi: document new automation commands + * tests/t_automate_get_file.at, tests/t_automate_get_revision_at, + tests/t_automate_get_manifest.at: trivial testing of new + automation commands for output as specified, make sure they + do not complete IDs, make sure invalid IDs are caught. + * testsuite.at: add new tests + +2005-09-03 Matthew Gregan + + * tests/t_persistent_server_keys_2.at: 'commit' needs a commit + message. Un-XFAIL. + * tests/t_netsync_unrelated.at: Fix 'setup' syntax. + * tests/t_add_vs_commit.at: BASE_REVISION needs to be in the root + of a working copy to work. Un-XFAIL. + * tests/t_add_stomp_file.at: 'add' does not take a --branch + argument. BASE_REVISION needs to be in the root of a working copy + to work. + * annotate.cc (build_parent_lineage): Don't access uninitialized + memory--use resize() rather than reserve(). + +2005-09-02 Matthew Gregan + + * monotone.cc: Use consistent case in option descriptions. + +2005-09-02 Nathaniel Smith + + * paths.{hh,cc}: Add split_path typedef. Use it. + +2005-09-02 Matt Johnston + + * lua.cc (monotone_guess_binary_file_contents_for_lua): use a + temporary char* buffer rather than &string[], extra copying seems + to have negligible performance impact. + * tests/perf-test.sh: change path from tests/ to contrib/, make + executable. + * tests/parse-accounting.pl: make executable. + +2005-09-01 Timothy Brownawell + + * lua.cc, std_hooks.lua: use proper regexes for .mt-ignore + taken from a patch from Martin Dvorak + * contrib/monotone-cvs-ignore.lua: New file, from the same patch. + supports .cvsignore files + * tests/t_mt_ignore.at: check that a missing .mt-ignore + doesn't cause problems + +2005-09-01 Timothy Brownawell + + * tests/t_mt_ignore.at: use RAW_MONOTONE instead of ugly --rcfile + Also actually do "mtn add" this time. + +2005-09-01 Timothy Brownawell + + * tests/t_mt_ignore.at: new test, checks that .mt-ignore works + * testsuite.at: add it + +2005-09-01 Timothy Brownawell + + * std_hooks.lua: support .mt-ignore + * monotone.texi: mention .mt-ignore and MT/wanted-testresults under + "Existing control files" + * .mt-ignore: ignore testsuite.dir + +2005-09-03 Benoît Dejean + + * commands.cc (ls_certs): + * netsync.cc (load_data): Merged strings. + +2005-09-01 Benoît Dejean + + * commands.cc: Merged one more "no such revision '%s'" string. + +2005-09-01 Benoît Dejean + + * commands.cc: Merged all "no such revision '%s'" strings. + (string_to_datetime): Merged catch blocks in order to merge error + messages. + +2005-09-01 Benoît Dejean + + * ChangeLog: Fixed. + +2005-09-01 Matthew Gregan + + * ui.cc (user_interface): Avoid calling sync_with_stdio(false) on + Win32 for now to work around a bug in MinGW where unsynchronized + std::cin returns EOF earlier when reading a stream with DOS + newlines. Resolves 'db load' failure reported by Howard Spindel. + * database.cc (load): Don't bother executing an empty string. + * commands.cc (ALIAS(import, setup)): Remove alias. + +2005-09-01 Matt Johnston + + * schema.sql: add BEGIN, COMMIT to make it a single transaction, + improves db init performance significantly on OS X (avoids many + disk-cache flushes). + +2005-09-01 Matthew Gregan + + * testsuite.at: Increase entropy used to generate port numbers + where we can and increase range of port numbers generated. + * monotone.texi: Fix a couple of minor typos. + +2005-09-01 Matthew Gregan + + * monotone.texi: Update 'setup' documentation and tutorial to + reflect new usage. Also update much of the monotone output in the + tutorials to reflect the output of more modern versions of + monotone. Correct some minor errors and typos while here. + * commands.cc (CMD(setup)): Require database and branch arguments. + (ALIAS(import,setup)): Add setup alias. + * testsuite.at, tests/*.at: Update 'setup' usage. + +2005-08-31 Richard Levitte + + * lua.cc, std_hooks.lua: Rename + monotone_guess_binary_filename_for_lua and guess_binary_filename + to monotone_guess_binary_file_contents_for_lua and + guess_binary_file_contents. + +2005-08-31 Benoît Dejean + + * basic_io.cc (basic_io::input_source::err): Merged strings. + +2005-08-31 Nathaniel Smith + + * file_io.cc (set_char_is_binary, guess_binary): static_cast chars + to uint8_t before using as array indices. Also replace some ints + with size_t's to quiet g++ warnings. + +2005-08-30 Benoît Dejean + + In function void set_char_is_binary(char, bool) + 133: warning: array subscript has type char + In function void init_char_is_binary() + 147: warning: comparison between signed and unsigned integer expressions + In function bool guess_binary(const std::string&) + 160: warning: comparison between signed and unsigned integer expressions + 162: warning: array subscript has type char + +2005-08-30 Benoît Dejean + + * file_io.cc (walk_tree): Fixed format. + +2005-08-31 Marcel van der Boom + + * std_hooks.lua (execute_confirm): New function. + (merge2_opendiff_cmd, merge3_opendiff_cmd): Add. + +2005-08-31 Matthew Gregan + + * paths.cc (test_bookkeeping_path, test_system_path): Second + attempt at compile fixes; this time the unit tests actually pass + too. + +2005-08-30 Matthew Gregan + + * paths.cc (test_bookkeeping_path, test_system_path): Shift object + instantiation around a little to work around what seems to be a + bug in the gcc 3.3 parser. + * win32/inodeprint.cc (inodeprint_file): Update to use new path + handling code. + * win32/fs.cc (tilde_expand): Compile fix. + +2005-08-30 Petr Baudis + + * std_hooks.lua: Simple support for merging using merge(1) and vim. + +2005-08-30 Benoît Dejean + + * po/fr.po: Updated French translation. + +2005-08-30 Benoît Dejean + + * commands.cc: Merged some error messages. + +2005-08-30 Benoît Dejean + + * commands.cc: Merged complete(..., file_id) and + complete(..., manifest_id) into template complete(..., ID). + +2005-08-30 Benoît Dejean + + * commands.cc (ls_certs): Reworked for i18n. + (CMD(commit)): Merged 2 strings. + +2005-08-30 Matthew Gregan + + * revision.cc (ensure_parents_loaded): Don't reuse an iterator + after we've invalidated it. Fixes 'diff' crash reported by Howard + Spindel. + +2005-08-30 Matt Johnston + + * botan/allocate.cpp: avoid string comparison when looking up the + default allocator + * monotone.cc (cpp_main): set a default allocator + +2005-08-28 Nathaniel Smith + + * tests/t_attributes.at: Delete checkout dir in between + checkouts. + +2005-08-28 Matt Johnston + + * keys.cc (keys_match): new function to compare whether two keys + match (ignoring whitespace as the database does, etc). + * packet.cc, keys.cc: use it for existing-key-comparison. + 2005-08-27 Nathaniel Smith * commands.cc (checkout): Special-case "checkout ." @@ -664,6 +1013,12 @@ (external_path): Rename to system_path. Misc. other updates. +2005-08-21 Eric Anderson + * file_io.cc, file_io.hh, lua.cc, std_hooks.lua: determine if a + file is binary by looking at it incrementally, rather than reading + it in entirely. Prepare for making it possible to control what + characters are considered "binary" + 2005-08-20 Nathaniel Smith * paths.cc (is_absolute): New function. @@ -1363,6 +1718,12 @@ requirements, zlib as a runtime requirement. 2005-08-09 Eric Anderson + + * tests/perf-test.sh: A repeatable performance test harness + * tests/parse-accounting.pl: A script that parses the accounting + output into a nice tabular format + +2005-08-09 Eric Anderson * Changes to significantly improve network pull performance * string_queue.hh: created to store pending data and allow for ======================================================================== --- Makefile.am 8aefb7ba1e9e19ac619b8828bbcdd8106ee3e7fa +++ Makefile.am 4fdc45d300225991df7992a71cedf7936a7d76b5 @@ -361,7 +361,7 @@ monotone.dvi: monotone.texi version.texi std_hooks.lua $(EPS_FIGURES) #%.eps: %.epsi -# mv $< $@ +# mv -f $< $@ # #%.epsi: %.ps # ps2epsi $< $@ @@ -379,6 +379,8 @@ TESTS = unit_tests $(srcdir)/testsuite +TESTS_ENVIRONMENT=AUTOTEST_PATH="." + mostlyclean-local: rm -rf testsuite.dir testsuite.log package_full_revision_dist.txt @@ -408,7 +410,7 @@ $(srcdir)/testsuite: $(srcdir)/testsuite.at $(wildcard $(srcdir)/tests/t_*.at) \ $(srcdir)/package.m4 autom4te --language=Autotest -I $(srcdir) $< -o address@hidden - mv address@hidden $@ + mv -f address@hidden $@ # we generate some headers to copy data into the executable @@ -428,12 +430,12 @@ %.h: %.sql txt2c Makefile ./txt2c $< $(*F) >address@hidden - cmp -s address@hidden $@ || mv address@hidden $@ + cmp -s address@hidden $@ || mv -f address@hidden $@ rm -f address@hidden %.h: %.lua txt2c Makefile ./txt2c $< $(*F) >address@hidden - cmp -s address@hidden $@ || mv address@hidden $@ + cmp -s address@hidden $@ || mv -f address@hidden $@ rm -f address@hidden # A fake target so we can use MT/revision as a prerequisite, yet not @@ -445,7 +447,7 @@ if [ ! -f $@ ]; then echo "unknown" > $@; fi package_revision.c: package_revision.txt txt2c Makefile ./txt2c --strip-trailing --no-static $< package_revision >address@hidden - cmp -s address@hidden $@ || mv address@hidden $@ + cmp -s address@hidden $@ || mv -f address@hidden $@ rm -f address@hidden .PHONY: package_full_revision.txt apidocs @@ -462,7 +464,7 @@ echo ' further changes may have been made.') >> $@ package_full_revision.c: package_full_revision.txt txt2c Makefile ./txt2c --no-static $< package_full_revision >address@hidden - cmp -s address@hidden $@ || mv address@hidden $@ + cmp -s address@hidden $@ || mv -f address@hidden $@ rm -f address@hidden # automake doesn't build html docs ======================================================================== --- annotate.cc 583bfb6d988073642e901dfa36d85c7c44c4ca37 +++ annotate.cc 613ae82123687d6e26b088c8f769d4efe9abd3fa @@ -390,7 +390,7 @@ // do the copied lines thing for our annotate_context std::vector lcs_src_lines; - lcs_src_lines.reserve(lcs.size()); + lcs_src_lines.resize(lcs.size()); size_t i, j; i = j = 0; while (i < file_interned.size() && j < lcs.size()) { ======================================================================== --- automate.cc b110377e8696e41dda47f78a8486b649b4743c5a +++ automate.cc 5b96e0ff436ae87bdb8bd25121cd53a522af80d6 @@ -903,6 +903,154 @@ guard.commit(); } +// Name: get_revision +// Arguments: +// 1: a revision id (optional, determined from working directory if non-existant) +// Added in: 1.0 +// Purpose: Prints changeset information for the specified revision id. +// +// There are several changes that are described; each of these is described by +// a different basic_io stanza. The first string pair of each stanza indicates the +// type of change represented. +// +// Possible values of this first value are along with an ordered list of +// basic_io formatted string pairs that will be provided are: +// +// 'old_revision' : represents a parent revision. +// format: ('old_revision', revision id) +// 'new_manifest' : represents the new manifest associated with the revision. +// format: ('new_manifest', manifest id) +// 'old_manifest' : represents a manifest associated with a parent revision. +// format: ('old_manifest', manifest id) +// 'patch' : represents a file that was modified. +// format: ('patch', filename), ('from', file id), ('to', file id) +// 'add_file' : represents a file that was added. +// format: ('add_file', filename) +// 'delete_file' : represents a file that was deleted. +// format: ('delete_file', filename) +// 'delete_dir' : represents a directory that was deleted. +// format: ('delete_dir', filename) +// 'rename_file' : represents a file that was renamed. +// format: ('rename_file', old filename), ('to', new filename) +// 'rename_dir' : represents a directory that was renamed. +// format: ('rename_dir', old filename), ('to', new filename) +// +// Output format: All stanzas are formatted by basic_io. Stanzas are seperated +// by a blank line. Values will be escaped, '\' -> '\\' and '"' -> '\"'. +// +// Error conditions: If the revision specified is unknown or invalid prints an +// error message to stderr and exits with status 1. +static void +automate_get_revision(std::vector args, + std::string const & help_name, + app_state & app, + std::ostream & output) +{ + if (args.size() > 1) + throw usage(help_name); + + revision_data dat; + revision_id ident; + + if (args.size() == 0) + { + revision_set rev; + manifest_map m_old, m_new; + + app.require_working_copy(); + calculate_unrestricted_revision(app, rev, m_old, m_new); + calculate_ident(rev, ident); + write_revision_set(rev, dat); + } + else + { + ident = revision_id(idx(args, 0)()); + N(app.db.revision_exists(ident), + F("no revision %s found in database") % ident); + app.db.get_revision(ident, dat); + } + + L(F("dumping revision %s\n") % ident); + output.write(dat.inner()().data(), dat.inner()().size()); +} + +// Name: get_manifest +// Arguments: +// 1: a manifest id (optional, determined from working directory if non-existant) +// Added in: 1.0 +// Purpose: Prints the contents of the manifest associated with the given manifest ID. +// +// Output format: One line for each file in the manifest. Each line begins with a +// 40 character file ID, followed by two space characters (' ') and then the filename. +// eg: +// 22382ac1bdffec21170a88ff2580fe39b508243f vocab.hh +// +// Error conditions: If the manifest ID specified is unknown or invalid prints an +// error message to stderr and exits with status 1. +static void +automate_get_manifest(std::vector args, + std::string const & help_name, + app_state & app, + std::ostream & output) +{ + if (args.size() > 1) + throw usage(help_name); + + manifest_data dat; + manifest_id ident; + + if (args.size() == 0) + { + revision_set rev; + manifest_map m_old, m_new; + + app.require_working_copy(); + calculate_unrestricted_revision(app, rev, m_old, m_new); + + calculate_ident(m_new, ident); + write_manifest_map(m_new, dat); + } + else + { + ident = manifest_id(idx(args, 0)()); + N(app.db.manifest_version_exists(ident), + F("no manifest version %s found in database") % ident); + app.db.get_manifest_version(ident, dat); + } + + L(F("dumping manifest %s\n") % ident); + output.write(dat.inner()().data(), dat.inner()().size()); +} + +// Name: get_file +// Arguments: +// 1: a file id +// Added in: 1.0 +// Purpose: Prints the contents of the specified file. +// +// Output format: The file contents are output without modification. +// +// Error conditions: If the file id specified is unknown or invalid prints +// an error message to stderr and exits with status 1. +static void +automate_get_file(std::vector args, + std::string const & help_name, + app_state & app, + std::ostream & output) +{ + if (args.size() != 1) + throw usage(help_name); + + file_id ident(idx(args, 0)()); + N(app.db.file_version_exists(ident), + F("no file version %s found in database") % ident); + + file_data dat; + L(F("dumping file %s\n") % ident); + app.db.get_file_version(ident, dat); + output.write(dat.inner()().data(), dat.inner()().size()); +} + void automate_command(utf8 cmd, std::vector args, std::string const & root_cmd_name, @@ -1153,6 +1301,12 @@ automate_stdio(args, root_cmd_name, app, output); else if (cmd() == "certs") automate_certs(args, root_cmd_name, app, output); + else if (cmd() == "get_revision") + automate_get_revision(args, root_cmd_name, app, output); + else if (cmd() == "get_manifest") + automate_get_manifest(args, root_cmd_name, app, output); + else if (cmd() == "get_file") + automate_get_file(args, root_cmd_name, app, output); else throw usage(root_cmd_name); } ======================================================================== --- basic_io.cc 59d07d48475fc4a7d1a5301f162fdb7245bbab62 +++ basic_io.cc 3c575f5fd41d00730c3a0a9eafe84105fa51f28a @@ -24,7 +24,7 @@ void basic_io::input_source::err(std::string const & s) { L(F("error in %s:%d:%d:E: %s") % name % line % col % s); - throw informative_failure((F("%s:%d:%d:E: %s") + throw informative_failure((F("error in %s:%d:%d:E: %s") % name % line % col % s).str()); } ======================================================================== --- botan/allocate.cpp bf95f795b13f03947041d16bae44b936d914f30d +++ botan/allocate.cpp 8222a5340314265755a2b79469a367158fc2f99b @@ -21,6 +21,7 @@ { public: Allocator* get(const std::string&) const; + Allocator* get_default() const; void add(const std::string&, Allocator*); std::string set_default_allocator(const std::string&); @@ -49,6 +50,21 @@ } /************************************************* +* Get the default allocator from the factory * +*************************************************/ +Allocator* AllocatorFactory::get_default() const + { + Mutex_Holder lock(factory_lock); + + std::map::const_iterator iter; + iter = alloc.find(default_allocator); + + if(iter == alloc.end()) + return 0; + return iter->second; + } + +/************************************************* * Make a new type available to the factory * *************************************************/ void AllocatorFactory::add(const std::string& type, Allocator* allocator) @@ -101,13 +117,13 @@ Allocator* alloc = 0; - if(type != "") + if(!type.empty()) { alloc = factory->get(type); if(alloc) return alloc; } - alloc = factory->get("default"); + alloc = factory->get_default(); if(alloc) return alloc; alloc = factory->get("locking"); ======================================================================== --- cert.cc 7375c4ce0944680b0b1347414d653139f6c828c7 +++ cert.cc 43de7f5240b7caa27fc590630afe3ffeea0bfa0b @@ -369,7 +369,7 @@ { // We really don't want the database key and the rcfile key // to differ. - N(remove_ws(dbkey()) == remove_ws(luakey()), + N(keys_match(id, dbkey, id, luakey), F("mismatch between private key '%s' in database" " and get_priv_key hook") % id); } ======================================================================== --- commands.cc 3176e0a5397306096cf3ad3da067252881ddb413 +++ commands.cc 55800638c9bd2da0aa48ab46d06beba1d5845c32 @@ -155,7 +155,7 @@ } else if (matched.size() > 1) { - string err = (F("command '%s' has multiple ambiguous expansions: \n") % cmd).str(); + string err = (F("command '%s' has multiple ambiguous expansions:\n") % cmd).str(); for (vector::iterator i = matched.begin(); i != matched.end(); ++i) err += (*i + "\n"); @@ -470,63 +470,34 @@ P(F("expanded to '%s'\n") % completion); } -static void -complete(app_state & app, - string const & str, - manifest_id & completion) -{ - N(str.find_first_not_of(constants::legal_id_bytes) == string::npos, - F("non-hex digits in id")); - if (str.size() == constants::idlen) - { - completion = manifest_id(str); - return; - } - set completions; - app.db.complete(str, completions); - N(completions.size() != 0, - F("partial id '%s' does not have a unique expansion") % str); - if (completions.size() > 1) - { - string err = (F("partial id '%s' has multiple ambiguous expansions: \n") % str).str(); - for (set::const_iterator i = completions.begin(); - i != completions.end(); ++i) - err += (i->inner()() + "\n"); - N(completions.size() == 1, boost::format(err)); - } - completion = *(completions.begin()); - P(F("expanding partial id '%s'\n" - "expanded to '%s'\n") - % str % completion); -} +template static void complete(app_state & app, string const & str, - file_id & completion) + ID & completion) { N(str.find_first_not_of(constants::legal_id_bytes) == string::npos, F("non-hex digits in id")); if (str.size() == constants::idlen) { - completion = file_id(str); + completion = ID(str); return; } - set completions; + set completions; app.db.complete(str, completions); N(completions.size() != 0, - F("partial id '%s' does not have a unique expansion") % str); + F("partial id '%s' does not have an expansion") % str); if (completions.size() > 1) { - string err = (F("partial id '%s' has multiple ambiguous expansions: \n") % str).str(); - for (set::const_iterator i = completions.begin(); + string err = (F("partial id '%s' has multiple ambiguous expansions:\n") % str).str(); + for (typename set::const_iterator i = completions.begin(); i != completions.end(); ++i) err += (i->inner()() + "\n"); N(completions.size() == 1, boost::format(err)); } completion = *(completions.begin()); - P(F("expanding partial id '%s'\n" - "expanded to '%s'\n") + P(F("expanded partial id '%s' to '%s'\n") % str % completion); } @@ -553,7 +524,7 @@ { if (checked.find(idx(certs, i).key) == checked.end() && !app.db.public_key_exists(idx(certs, i).key)) - P(F("warning: no public key '%s' found in database\n") + P(F("no public key '%s' found in database") % idx(certs, i).key); checked.insert(idx(certs, i).key); } @@ -563,6 +534,21 @@ // particular. sort(certs.begin(), certs.end()); + string str = _("Key : %s\n" + "Sig : %s\n" + "Name : %s\n" + "Value : %s\n"); + string extra_str = " : %s\n"; + + string::size_type colon_pos = str.find(':'); + + if (colon_pos != string::npos) + { + string substr(str, 0, colon_pos); + colon_pos = length(substr); + extra_str = string(colon_pos, ' ') + ": %s\n"; + } + for (size_t i = 0; i < certs.size(); ++i) { cert_status status = check_cert(app, idx(certs, i)); @@ -582,13 +568,13 @@ switch (status) { case cert_ok: - stat = "ok"; + stat = _("ok"); break; case cert_bad: - stat = "bad"; + stat = _("bad"); break; case cert_unknown: - stat = "unknown"; + stat = _("unknown"); break; } @@ -596,14 +582,15 @@ split_into_lines(washed, lines); I(lines.size() > 0); - cout << "-----------------------------------------------------------------" << endl - << "Key : " << idx(certs, i).key() << endl - << "Sig : " << stat << endl - << "Name : " << idx(certs, i).name() << endl - << "Value : " << idx(lines, 0) << endl; + cout << std::string(guess_terminal_width(), '-') << '\n' + << boost::format(str) + % idx(certs, i).key() + % stat + % idx(certs, i).name() + % idx(lines, 0); for (size_t i = 1; i < lines.size(); ++i) - cout << " : " << idx(lines, i) << endl; + cout << boost::format(extra_str) % idx(lines, i); } if (certs.size() > 0) @@ -676,7 +663,7 @@ revision_id ident; complete(app, id, ident); N(app.db.revision_exists(ident), - F("no revision %s found in database") % ident); + F("no such revision '%s'") % ident); //check that the revision does not have any children set children; @@ -1032,7 +1019,7 @@ app.db.get_revision(r, rev); N(rev.edges.size() == 1, - F("revision %s has %d changesets, cannot invert\n") % r % rev.edges.size()); + F("revision '%s' has %d changesets, cannot invert\n") % r % rev.edges.size()); cert_value branchname; guess_branch(r, app, branchname); @@ -1059,7 +1046,7 @@ cert_revision_in_branch(inv_id, branchname, app, dbw); cert_revision_date_now(inv_id, app, dbw); cert_revision_author_default(inv_id, app, dbw); - cert_revision_changelog(inv_id, (F("disapproval of revision %s") % r).str(), app, dbw); + cert_revision_changelog(inv_id, (boost::format("disapproval of revision '%s'") % r).str(), app, dbw); guard.commit(); } } @@ -1296,114 +1283,46 @@ } CMD(cat, N_("informative"), - N_("(file|manifest|revision) [ID]\n" - "file REVISION FILENAME"), - N_("write file, manifest, or revision from database to stdout"), - OPT_NONE) + N_("FILENAME"), + N_("write file from database to stdout"), + OPT_REVISION) { - if (args.size() < 1 || args.size() > 3) + if (args.size() != 1) throw usage(name); - if (args.size() == 3 && idx(args, 0)() != "file") - throw usage(name); + if (app.revision_selectors.size() == 0) + app.require_working_copy(); + transaction_guard guard(app.db); - if (idx(args, 0)() == "file") - { - file_id ident; - if (args.size() == 1) - throw usage(name); - else if (args.size() == 2) - { - complete(app, idx(args, 1)(), ident); - - N(app.db.file_version_exists(ident), - F("no file version %s found in database") % ident); - } - else if (args.size() == 3) - { - revision_id rid; - complete(app, idx(args, 1)(), rid); - // paths are interpreted as standard external ones when we're in a - // working copy, but as project-rooted external ones otherwise - file_path fp; - if (app.found_working_copy) - fp = file_path_external(idx(args, 2)); - else - fp = file_path_internal_from_user(idx(args, 2)); - manifest_id mid; - app.db.get_revision_manifest(rid, mid); - manifest_map m; - app.db.get_manifest(mid, m); - manifest_map::const_iterator i = m.find(fp); - N(i != m.end(), F("no file '%s' found in revision '%s'\n") % fp % rid); - ident = manifest_entry_id(i); - } - else - throw usage(name); - - file_data dat; - L(F("dumping file %s\n") % ident); - app.db.get_file_version(ident, dat); - cout.write(dat.inner()().data(), dat.inner()().size()); - } - else if (idx(args, 0)() == "manifest") - { - manifest_data dat; - manifest_id ident; + file_id ident; + revision_id rid; + if (app.revision_selectors.size() == 0) + get_revision_id(rid); + else + complete(app, idx(app.revision_selectors, 0)(), rid); + N(app.db.revision_exists(rid), F("no such revision '%s'") % rid); - if (args.size() == 1) - { - revision_set rev; - manifest_map m_old, m_new; + // paths are interpreted as standard external ones when we're in a + // working copy, but as project-rooted external ones otherwise + file_path fp; + if (app.found_working_copy) + fp = file_path_external(idx(args, 0)); + else + fp = file_path_internal_from_user(idx(args, 0)); + manifest_id mid; + app.db.get_revision_manifest(rid, mid); + manifest_map m; + app.db.get_manifest(mid, m); + manifest_map::const_iterator i = m.find(fp); + N(i != m.end(), F("no file '%s' found in revision '%s'\n") % fp % rid); + ident = manifest_entry_id(i); + + file_data dat; + L(F("dumping file '%s'\n") % ident); + app.db.get_file_version(ident, dat); + cout.write(dat.inner()().data(), dat.inner()().size()); - app.require_working_copy(); - calculate_unrestricted_revision(app, rev, m_old, m_new); - - calculate_ident(m_new, ident); - write_manifest_map(m_new, dat); - } - else - { - complete(app, idx(args, 1)(), ident); - N(app.db.manifest_version_exists(ident), - F("no manifest version %s found in database") % ident); - app.db.get_manifest_version(ident, dat); - } - - L(F("dumping manifest %s\n") % ident); - cout.write(dat.inner()().data(), dat.inner()().size()); - } - - else if (idx(args, 0)() == "revision") - { - revision_data dat; - revision_id ident; - - if (args.size() == 1) - { - revision_set rev; - manifest_map m_old, m_new; - - app.require_working_copy(); - calculate_unrestricted_revision(app, rev, m_old, m_new); - calculate_ident(rev, ident); - write_revision_set(rev, dat); - } - else - { - complete(app, idx(args, 1)(), ident); - N(app.db.revision_exists(ident), - F("no revision %s found in database") % ident); - app.db.get_revision(ident, dat); - } - - L(F("dumping revision %s\n") % ident); - cout.write(dat.inner()().data(), dat.inner()().size()); - } - else - throw usage(name); - guard.commit(); } @@ -1452,7 +1371,7 @@ // use specified revision complete(app, idx(app.revision_selectors, 0)(), ident); N(app.db.revision_exists(ident), - F("no revision %s found in database") % ident); + F("no such revision '%s'") % ident); cert_value b; guess_branch(ident, app, b); @@ -1772,9 +1691,9 @@ complete(app, idx(args, 0)(), m_old_id); complete(app, idx(args, 1)(), m_new_id); - N(app.db.manifest_version_exists(m_old_id), F("no such manifest %s") % m_old_id); + N(app.db.manifest_version_exists(m_old_id), F("no such manifest '%s'") % m_old_id); app.db.get_manifest(m_old_id, m_old); - N(app.db.manifest_version_exists(m_new_id), F("no such manifest %s") % m_new_id); + N(app.db.manifest_version_exists(m_new_id), F("no such manifest '%s'") % m_new_id); app.db.get_manifest(m_new_id, m_new); delta del; @@ -1798,9 +1717,9 @@ complete(app, idx(args, 0)(), f_old_id); complete(app, idx(args, 1)(), f_new_id); - N(app.db.file_version_exists(f_old_id), F("no such file %s") % f_old_id); + N(app.db.file_version_exists(f_old_id), F("no such file '%s'") % f_old_id); app.db.get_file_version(f_old_id, f_old_data); - N(app.db.file_version_exists(f_new_id), F("no such file %s") % f_new_id); + N(app.db.file_version_exists(f_new_id), F("no such file '%s'") % f_new_id); app.db.get_file_version(f_new_id, f_new_data); delta del; diff(f_old_data.inner(), f_new_data.inner(), del); @@ -1820,7 +1739,7 @@ complete(app, idx(args, 0)(), r_id); - N(app.db.revision_exists(r_id), F("no such revision %s") % r_id); + N(app.db.revision_exists(r_id), F("no such revision '%s'") % r_id); app.db.get_revision(r_id, r_data); pw.consume_revision_data(r_id, r_data); } @@ -1838,7 +1757,7 @@ complete(app, idx(args, 0)(), m_id); - N(app.db.manifest_version_exists(m_id), F("no such manifest %s") % m_id); + N(app.db.manifest_version_exists(m_id), F("no such manifest '%s'") % m_id); app.db.get_manifest_version(m_id, m_data); pw.consume_manifest_data(m_id, m_data); } @@ -1857,7 +1776,7 @@ complete(app, idx(args, 0)(), f_id); - N(app.db.file_version_exists(f_id), F("no such file %s") % f_id); + N(app.db.file_version_exists(f_id), F("no such file '%s'") % f_id); app.db.get_file_version(f_id, f_data); pw.consume_file_data(f_id, f_data); } @@ -2191,7 +2110,7 @@ } file_path path = file_path_external(idx(args,1)); - N(file_exists(path), F("no such file %s") % path); + N(file_exists(path), F("no such file '%s'") % path); bool attrs_modified = false; @@ -2286,14 +2205,10 @@ tmp.erase(pos, 1); return boost::posix_time::from_iso_string(tmp); } - catch (std::out_of_range &e) + catch (std::exception &e) { N(false, F("failed to parse date string '%s': %s") % s % e.what()); } - catch (std::exception &) - { - N(false, F("failed to parse date string '%s'") % s); - } I(false); } @@ -2328,8 +2243,10 @@ guess_branch(edge_old_revision(rs.edges.begin()), app, branchname); P(F("beginning commit on branch '%s'\n") % branchname); - L(F("new manifest %s\n") % rs.new_manifest); - L(F("new revision %s\n") % rid); + L(F("new manifest '%s'\n" + "new revision '%s'\n") + % rs.new_manifest + % rid); // can't have both a --message and a --message-file ... N(app.message().length() == 0 || app.message_file().length() == 0, @@ -2559,7 +2476,8 @@ bool new_is_archived, diff_type type) { - std::string patch_sep = std::string(guess_terminal_width(), '='); + // 60 is somewhat arbitrary, but less than 80 + std::string patch_sep = std::string(60, '='); for (change_set::delta_map::const_iterator i = deltas.begin(); i != deltas.end(); ++i) { @@ -2685,7 +2603,7 @@ manifest_map m_old; complete(app, idx(app.revision_selectors, 0)(), r_old_id); N(app.db.revision_exists(r_old_id), - F("revision %s does not exist") % r_old_id); + F("no such revision '%s'") % r_old_id); app.db.get_revision(r_old_id, r_old); calculate_unrestricted_revision(app, r_new, m_old, m_new); I(r_new.edges.size() == 1 || r_new.edges.size() == 0); @@ -2700,10 +2618,10 @@ complete(app, idx(app.revision_selectors, 0)(), r_old_id); complete(app, idx(app.revision_selectors, 1)(), r_new_id); N(app.db.revision_exists(r_old_id), - F("revision %s does not exist") % r_old_id); + F("no such revision '%s'") % r_old_id); app.db.get_revision(r_old_id, r_old); N(app.db.revision_exists(r_new_id), - F("revision %s does not exist") % r_new_id); + F("no such revision '%s'") % r_new_id); app.db.get_revision(r_new_id, r_new); app.db.get_revision_manifest(r_new_id, m_new_id); app.db.get_manifest(m_new_id, m_new); @@ -2761,7 +2679,7 @@ } else { - cout << F("# no changes") << endl; + cout << "# no changes" << endl; } cout << "# " << endl; @@ -2901,7 +2819,7 @@ { complete(app, app.revision_selectors[0](), r_chosen_id); N(app.db.revision_exists(r_chosen_id), - F("no revision %s found in database") % r_chosen_id); + F("no such revision '%s'") % r_chosen_id); } notify_if_multiple_heads(app); @@ -3065,8 +2983,8 @@ } else if (find_common_ancestor_for_merge(left_id, right_id, anc_id, app)) { - P(F("common ancestor %s found\n") % describe_revision(app, anc_id)); - P(F("trying 3-way merge\n")); + P(F("common ancestor %s found\n" + "trying 3-way merge\n") % describe_revision(app, anc_id)); app.db.get_revision(anc_id, anc_rev); app.db.get_manifest(anc_rev.new_manifest, anc_man); @@ -3164,8 +3082,8 @@ packet_db_writer dbw(app); cert_revision_in_branch(merged, app.branch_name(), app, dbw); - string log = (F("merge of %s\n" - " and %s\n") % left % right).str(); + string log = (boost::format("merge of %s\n" + " and %s\n") % left % right).str(); cert_revision_changelog(merged, log, app, dbw); guard.commit(); @@ -3248,8 +3166,8 @@ cert_revision_in_branch(merged, idx(args, 1)(), app, dbw); - string log = (F("propagate from branch '%s' (head %s)\n" - " to branch '%s' (head %s)\n") + string log = (boost::format("propagate from branch '%s' (head %s)\n" + " to branch '%s' (head %s)\n") % idx(args, 0) % (*src_i) % idx(args, 1) % (*dst_i)).str(); @@ -3314,10 +3232,10 @@ cert_revision_in_branch(merged, branch, app, dbw); - string log = (F("explicit_merge of %s\n" - " and %s\n" - " using ancestor %s\n" - " to branch '%s'\n") + string log = (boost::format("explicit_merge of '%s'\n" + " and '%s'\n" + " using ancestor '%s'\n" + " to branch '%s'\n") % left % right % ancestor % branch).str(); cert_revision_changelog(merged, log, app, dbw); @@ -3445,7 +3363,8 @@ CMD(rcs_import, N_("debug"), N_("RCSFILE..."), N_("parse versions in RCS files\n" - "this command doesn't reconstruct or import revisions. you probably want cvs_import"), + "this command doesn't reconstruct or import revisions." + "you probably want cvs_import"), OPT_BRANCH_NAME) { if (args.size() < 1) @@ -3552,7 +3471,7 @@ app.db.get_manifest(rev.new_manifest, mm); manifest_map::const_iterator i = mm.find(file); N(i != mm.end(), - F("No such file '%s' in revision %s\n") % file % rid); + F("no such file '%s' in revision '%s'\n") % file % rid); file_id fid = manifest_entry_id(*i); L(F("annotate for file_id %s\n") % manifest_entry_id(*i)); @@ -3560,7 +3479,7 @@ } CMD(log, N_("informative"), N_("[FILE]"), - N_("print history in reverse order (filtering by 'FILE'). If one or more\n" + N_("print history in reverse order (filtering by 'FILE'). If one or more\n" "revisions are given, use them as a starting point."), OPT_LAST % OPT_REVISION % OPT_BRIEF % OPT_DIFFS % OPT_NO_MERGES) { @@ -3727,16 +3646,16 @@ } } - CMD(setup, N_("tree"), N_("DIRECTORY"), N_("setup a new working copy directory"), OPT_BRANCH_NAME) { - string dir; - if (args.size() != 1) throw usage(name); - dir = idx(args,0)(); + N(!app.branch_name().empty(), F("need --branch argument for setup")); + app.db.ensure_open(); + + string dir = idx(args,0)(); app.create_working_copy(dir); revision_id null; put_revision_id(null); @@ -3758,7 +3677,10 @@ "inventory\n" "stdio\n" "certs REV\n" - "select SELECTOR\n"), + "select SELECTOR\n" + "get_file ID\n" + "get_manifest [ID]\n" + "get_revision [ID]\n"), N_("automation interface"), OPT_NONE) { ======================================================================== --- configure.ac 84632e90c32942348f38e80ec5d0e47baed43ad4 +++ configure.ac 289e0cb6ea26e1a8e515e7f81626a49e77381d69 @@ -254,12 +254,15 @@ __wont_compile_ #endif ], - AM_CONDITIONAL(WIN32_PLATFORM, true), - AM_CONDITIONAL(WIN32_PLATFORM, false), + ac_win32=yes, + ac_win32=no, + ac_win32=no)]) +if test "$ac_win32" = "yes"; then + AM_CONDITIONAL(WIN32_PLATFORM, true) +else AM_CONDITIONAL(WIN32_PLATFORM, false) -)]) +fi - # Check for IPv6. Let the user enable or disable it manually using a # three-state (yes|no|auto) --enable argument. AC_ARG_ENABLE(ipv6, ======================================================================== --- contrib/monotone-cvs-ignore.lua +++ contrib/monotone-cvs-ignore.lua 9d8fe793ab5c6f3a5c21f534ceedea2796ee58eb @@ -0,0 +1,27 @@ +function glob_to_pattern(glob) + local pattern + + -- escape all special characters: + pattern = string.gsub(glob, "([%^%$%(%)%%%.%[%]%*%+%-%?])", "%%%1") + + -- convert the glob's ones to pattern's: + pattern = string.gsub(pattern, "%%%*", "[^/]*") + pattern = string.gsub(pattern, "%%%?", ".") + + return pattern +end + +function ignore_file(name) + local dir, pat1, pat2 + + dir = string.gsub(name, "/[^/]+$", "/") + if (dir == name) then dir = "" end + pat1 = "^" .. glob_to_pattern(dir) + + for line in io.lines(dir .. ".cvsignore") do + pat2 = glob_to_pattern(line) .. "$" + if (string.find(name, pat1 .. pat2)) then return true end + end + + return false +end ======================================================================== --- contrib/parse-accounting.pl +++ contrib/parse-accounting.pl 4b8d042f81fbd18ab8efeedaf705fb5854e31e18 @@ -0,0 +1,101 @@ +#!/usr/bin/perl -w +use strict; +use FileHandle; + +# possible values that can be extracted from the file... +my ($cpus, $max_size, $max_resident, $copied, $malloc); + +die "Usage: " unless @ARGV == 3; + +my ($test,$what,$file) = @ARGV; + +parse_file($file); + +if (defined $copied && defined $malloc && defined $max_resident && defined $max_size) { + if ($test eq 'header') { + print <<'END_OF_HEADER'; + Maximum (MiB) Copied Malloc + *Test* Operation CPU(s) Size Resident (MiB) (MiB) +---------------- --------- ------ ------- ------- -------- -------- +END_OF_HEADER + } + eval ' + format STDOUT = +@<<<<<<<<<<<<<<< @<<<<<<<< @###.# @###.## @###.## @####### @####### +$test, $what, $cpus, $max_size, $max_resident, $copied, $malloc +. + '; die $@ if $@ +} elsif (defined $max_resident && defined $max_size) { + if ($test eq 'header') { + print <<'END_OF_HEADER'; + Maximum (MiB) + *Test* Operation CPU(s) Size Resident +---------------- --------- ------ ------- ------- +END_OF_HEADER + } + eval ' + format STDOUT = +@<<<<<<<<<<<<<<< @<<<<<<<< @###.# @###.## @###.## +$test, $what, $cpus, $max_size, $max_resident, +. + '; die $@ if $@ +} else { + if ($test eq 'header') { + print <<'END_OF_HEADER'; + *Test* Operation CPU(s) +---------------- --------- ------ +END_OF_HEADER + } + eval ' + format STDOUT = +@<<<<<<<<<<<<<<< @<<<<<<<< @###.# +$test, $what, $cpus +. + '; die $@ if $@ +} + +exit(0) if $test eq 'header'; + +$max_size ||= -1; +$max_resident ||= -1; +$copied ||= -1; +$malloc ||= -1; + +write; + +sub parse_file { + my($file) = @_; + + my $fh = new FileHandle($file) or die "Can't open $file for read: $!"; + my ($usertime,$systime); + while(<$fh>) { + # parse builtin accounting... + $cpus = $1 + $2 + if /^STATS: User time: (\d+\.\d+)s, System time: (\d+\.\d+)s$/o; + ($max_size,$max_resident) = ($1,$2) + if /^STATS: Max Size MiB: (\d+\.\d+), Max Resident MiB: (\d+\.\d+)$/o; + $copied = $1 + if /^STATS: MiB copied: (\d+\.\d+), Total/o; + $malloc = $1 + if /^STATS: MiB malloced: (\d+\.\d+), Malloc/o; + + # parse external accounting by /usr/bin/time on debian... + $usertime = $1 * 60 + $2 + if /^user\s+(\d+)m(\d+\.\d+)s$/o; + $systime = $1 * 60 + $2 + if /^sys\s+(\d+)m(\d+\.\d+)s$/o; + # parse external accounting by time in zsh... + ($usertime,$systime) = ($1,$2) + if /^(\d+\.\d+)user (\d+\.\d+)system .*CPU/o; + } + + if (defined $usertime || defined $systime) { + die "both internal and external statistics?? log in $file" + if defined $cpus; + die "missing user or system time?? log in $file" + unless defined $usertime && defined $systime; + $cpus = $usertime + $systime; + } + die "internal, didn't get cpu seconds from $file?!" unless defined $cpus; +} + ======================================================================== --- contrib/perf-test.sh +++ contrib/perf-test.sh 37672e98ef9148f8aef18ac7a520139d8de860d9 @@ -0,0 +1,316 @@ +#!/bin/sh +set -e +if [ "$1" = "" ]; then + MONOTONE=`pwd`/monotone +elif [ -x "$1" ]; then + MONOTONE="$1" +else + echo "Usage: $0 [monotone-binary-to-test [test-to-run ...]]" + exit 1 +fi + +if [ ! -x $MONOTONE ]; then + echo "$MONOTONE doesn't exist?!" + exit 1 +fi + +PARSE_ACCOUNT=`pwd`/contrib/parse-accounting.pl +if [ -x $PARSE_ACCOUNT ]; then + : +elif [ -x `dirname $MONOTONE`/contrib/parse-accounting.pl ]; then + PARSE_ACCOUNT=`dirname $MONOTONE`/contrib/parse-accounting.pl +else + echo "can't find parse-accounting.pl. Looked in `pwd`/contrib, and `dirname $MONOTONE`/contrib" + exit 1 +fi + +MONOTONE_DB=`cat MT/options | grep database | awk '{print $2}' | sed 's/^.//' | sed 's/.$//'` +if [ -z "$MONOTONE_DB" -o ! -f "$MONOTONE_DB" ]; then + echo "Couldn't auto-determine monotone db?!" + exit 1 +fi +[ -d /tmp/mt-perf-test ] || mkdir /tmp/mt-perf-test +cd /tmp/mt-perf-test + +# figure out if binary has timing built in... +ENABLE_MONOTONE_STATISTICS=1 $MONOTONE --help >timing-check.out 2>&1 +if [ `grep '^STATS: ' timing-check.out | wc -l` -gt 1 ]; then + MEASURE= + PIDFILE_ARG= + KILLBY=child + echo "Using builtin statistics..." +else + MEASURE=time + PIDFILE_ARG=--pid-file=/tmp/mt-perf-test/pid-file + KILLBY=file + echo "Using external statistics..." +fi + +[ -d staging ] || mkdir staging +cd staging + +# Rebuild all of the various files for testing ... + +if [ ! -f random.large ]; then + echo "rebuilding random.large (this takes a long time)..." + dd if=/dev/urandom of=random.large-new bs=1024k count=100 >/dev/null 2>&1 + mv random.large-new random.large +fi + +for i in 0 1 2; do + for j in 0 1 2 3 4 5 6 7 8 9; do + if [ ! -f random.medium.$i$j ]; then + echo "rebuilding random.medium.$i$j..." + dd if=/dev/urandom of=random.medium-new bs=1024k count=10 >/dev/null 2>&1 + mv random.medium-new random.medium.$i$j + fi + done +done + +if [ ! -f halfzero.large ]; then + echo "rebuilding halfzero.large..." + dd if=/dev/zero of=halfzero.large-new bs=1024k count=50 >/dev/null 2>&1 + dd if=/dev/urandom of=halfzero.large-new bs=1024k seek=50 count=50 >/dev/null 2>&1 + mv halfzero.large-new halfzero.large +fi + +if [ ! -d monotone ]; then + [ ! -d monotone-new ] || rm -rf monotone-new + mkdir monotone-new + # revisions 0.10 .. 0.22 + for i in 713ed1966baced883ed865a931f97259522f90da fdc32bcc09e2714350fb514990bd26acb607264b 3cd6b8cc947ddab015fd945d3c305fc748bb6d0a 95a1a16c0941cc1ae51e9eb5d64d075ef35c5b19 fdf1335b4dfd8c1529fef8db58e5b819b03f7c8a 20b36b747dcce1230a6e7a0b1554bd7874f0fbe7 35da5df64546301d332303bbf63b6799d70932c8 e8c9e4eb0534a4c6e538935576330de34ec42052 168adf9537ff136c9b7fe7faad5991f92859390d 44ed8807bead656889fb5022f974e13a7169098c e65bc11b6670a0b2ed8e72214cb81d94e6a9a2d1 28058ae3e850229a5d8fae65415cbbf82b435377; do + echo "checking out monotone rev $i..." + $MONOTONE --db $MONOTONE_DB checkout --revision $i monotone-new/mt-$i + done + # Version 0.17, had to specify the branch explicitly to get checkout to work. + i=337d62e5cbd50c36e2f2c2bda489a98de3a8aeb7 + echo "checking out monotone rev $i..." + $MONOTONE --db $MONOTONE_DB checkout --branch net.venge.monotone --revision $i monotone-new/mt-$i + mv monotone-new/mt-168adf9537ff136c9b7fe7faad5991f92859390d monotone-new/mt-0.19 + rm -rf monotone-new/*/MT + mv monotone-new monotone +fi + +cd /tmp/mt-perf-test +if [ ! -d dbdir ]; then + [ ! -d dbdir-new ] || rm -rf dbdir-new + mkdir dbdir-new + cd dbdir-new + cat >monotonerc <keys </dev/null 2>&1 +} + +load_zero_large() { + dd if=/dev/zero of=zero.large bs=1024k count=100 >/dev/null 2>&1 +} + +load_random_medium() { + cp -rp ../staging/random.medium.00 . +} + +load_random_medium_20() { + cp -rp ../staging/random.medium.[01]? . +} + +load_halfzero_large() { + cp -rp ../staging/halfzero.large . +} + +load_random_large() { + cp -rp ../staging/random.large . +} + +load_monotone() { + cp -rp ../staging/monotone/mt-0.19 . +} + +load_mt_multiple() { + cp -rp ../staging/monotone . +} + +load_mt_bigfiles() { + for i in ../staging/monotone/mt-*; do + j=`basename $i` + find $i -type f -exec cat '{}' \; >$j.txt + done +} + +load_mixed() { + if [ "$1" = "" ]; then + echo "Usage load_mixed #" + exit 1 + fi + RANDOM_LIST=(`ls ../staging/random.medium.??`) + MONOTONE_LIST=(`ls -d ../staging/monotone/mt-*`) + dd if=/dev/zero of=zero.med bs=1024k count=10 >/dev/null 2>&1 + i=0; + j=0; + while [ $i -lt $1 ]; do + MT_PATH=${MONOTONE_LIST[$i]} + MT_NAME=`basename $MT_PATH` + [ -d $MT_NAME ] || cp -rp $MT_PATH . + cp ${RANDOM_LIST[$j]} $MT_NAME + cat zero.med >>$MT_NAME/`basename ${RANDOM_LIST[$j]}` + j=`expr $j + 1` + cp ${RANDOM_LIST[$j]} $MT_NAME + cat zero.med >>$MT_NAME/`basename ${RANDOM_LIST[$j]}` + j=`expr $j + 1` + i=`expr $i + 1` + done +} + +load_mixed_1() { + load_mixed 1 +} + +load_mixed_4() { + load_mixed 4 +} + +load_mixed_12() { + load_mixed 12 +} + +load_everything() { + # print something out here even though it means removing + # from the output because it takes so long. + echo -n "load everything..."; + load_zero_small + echo -n "." + load_zero_large + echo -n "." + load_random_medium_20 + echo -n "." + load_halfzero_large + echo -n "." + load_random_large + echo -n "." + load_mt_multiple + echo -n "." + load_mt_bigfiles + echo -n "." + load_mixed_12 + echo "." +} + +prep_test() { + cd /tmp/mt-perf-test/dbdir + [ ! -f checkin.db ] || rm checkin.db + [ ! -f netsync.db ] || rm netsync.db + [ ! -f checkin.db-journal ] || rm checkin.db-journal + [ ! -f netsync.db-journal ] || rm netsync.db-journal + + $MONOTONE --db checkin.db db init >/tmp/mt-perf-test/log 2>&1 + $MONOTONE --db netsync.db db init >>/tmp/mt-perf-test/log 2>&1 + cat keys | $MONOTONE --db checkin.db read >>/tmp/mt-perf-test/log 2>&1 + cat keys | $MONOTONE --db netsync.db read >>/tmp/mt-perf-test/log 2>&1 + + cd /tmp/mt-perf-test + [ ! -d testdir ] || rm -rf testdir + $MONOTONE --db dbdir/checkin.db setup --branch test testdir >>/tmp/mt-perf-test/log 2>&1 + cd testdir +} + +dotest() { + prep_test + load_$1 + export ENABLE_MONOTONE_STATISTICS=1 + $MEASURE $MONOTONE add . >/tmp/mt-perf-test/add.log 2>&1 + $PARSE_ACCOUNT "$1" "add files" /tmp/mt-perf-test/add.log + + cp ../dbdir/monotonerc MT/monotonerc + $MEASURE $MONOTONE commit -m foo >/tmp/mt-perf-test/commit.log 2>&1 + $PARSE_ACCOUNT "$1" "commit" /tmp/mt-perf-test/commit.log + + cd .. + rm -rf testdir + $MEASURE $MONOTONE --db dbdir/checkin.db checkout --branch test testdir >/tmp/mt-perf-test/checkout.log 2>&1 + $PARSE_ACCOUNT "$1" "checkout" /tmp/mt-perf-test/checkout.log + + cd testdir + cp ../dbdir/monotonerc MT/monotonerc + [ -f /tmp/mt-perf-test/pid-file ] && rm /tmp/mt-perf-test/pid-file + $MEASURE $MONOTONE --db ../dbdir/checkin.db $PIDFILE_ARG serve localhost:7318 test >/tmp/mt-perf-test/serve.log 2>&1 & + SERVER=$! + sleep 1 + $MEASURE $MONOTONE --db ../dbdir/netsync.db pull localhost:7318 test >/tmp/mt-perf-test/pull.log 2>&1 + # SEGV here is intentional, it causes the server to exit through an + # assertion which prints out the accounting information + case $KILLBY in + child) kill -SEGV $SERVER ;; + file) kill -SEGV `cat /tmp/mt-perf-test/pid-file` ;; + *) echo "internal error, unknown killby '$KILLBY'" ;; + esac + wait $SERVER || true + $PARSE_ACCOUNT "$1" "serve" /tmp/mt-perf-test/serve.log + $PARSE_ACCOUNT "$1" "pull" /tmp/mt-perf-test/pull.log + echo + unset ENABLE_MONOTONE_STATISTICS +} + +echo -n "Test CPU: " +grep 'model name' /proc/cpuinfo | sed 's/model name.: //' | head -1 +$MONOTONE --version 2>&1 | grep 'base revision' +ENABLE_MONOTONE_STATISTICS=1 $MEASURE $MONOTONE --help >/tmp/mt-perf-test/help.log 2>&1 +$PARSE_ACCOUNT header header /tmp/mt-perf-test/help.log +if [ "$2" != "" ]; then + shift + while [ "$1" != "" ]; do + dotest "$1" + shift + done + exit 0 +fi +dotest zero_small +dotest zero_large +dotest random_medium +dotest random_medium_20 +dotest halfzero_large +dotest random_large +dotest monotone +dotest mt_multiple +dotest mt_bigfiles +dotest mixed_1 +dotest mixed_4 +dotest mixed_12 +dotest everything + ======================================================================== --- database.cc 99621dc8dd3b871fc41204945906db116111519d +++ database.cc 04b7bf7f3d9722bb194a0623a339babc83d95c74 @@ -363,7 +363,8 @@ tmp.erase(0, len); } - sqlite3_exec(__sql, tmp.c_str(), NULL, NULL, NULL); + if (!tmp.empty()) + sqlite3_exec(__sql, tmp.c_str(), NULL, NULL, NULL); assert_sqlite3_ok(__sql); } ======================================================================== --- file_io.cc a887c87104212bab175b54ec1ceb1fa5153024e5 +++ file_io.cc e39a1c13030c5378ea4cb3aa9621148ce0c8fb7d @@ -1,3 +1,4 @@ +// -*- mode: C++; c-file-style: "gnu"; indent-tabs-mode: nil -*- // copyright (C) 2002, 2003 graydon hoare // all rights reserved. // licensed to the public under the terms of the GNU GPL (>= 2) @@ -123,15 +124,44 @@ return true; } -bool guess_binary(string const & s) +static bool did_char_is_binary_init; +static bool char_is_binary[256]; + +void +set_char_is_binary(char c, bool is_binary) { + char_is_binary[static_cast(c)] = is_binary; +} + +static void +init_char_is_binary() +{ // these do not occur in ASCII text files // FIXME: this heuristic is (a) crap and (b) hardcoded. fix both these. - if (s.find_first_of('\x00') != string::npos || - s.find_first_of("\x01\x02\x03\x04\x05\x06\x0e\x0f" - "\x10\x11\x12\x13\x14\x15\x16\x17\x18" - "\x19\x1a\x1c\x1d\x1e\x1f") != string::npos) - return true; + // Should be calling a lua hook here that can use set_char_is_binary() + // That will at least fix (b) + string nontext_chars("\x01\x02\x03\x04\x05\x06\x0e\x0f" + "\x10\x11\x12\x13\x14\x15\x16\x17\x18" + "\x19\x1a\x1c\x1d\x1e\x1f"); + set_char_is_binary('\0',true); + for(size_t i = 0; i < nontext_chars.size(); ++i) + { + set_char_is_binary(nontext_chars[i], true); + } +} + +bool guess_binary(string const & s) +{ + if (did_char_is_binary_init == false) + { + init_char_is_binary(); + } + + for (size_t i = 0; i < s.size(); ++i) + { + if (char_is_binary[ static_cast(s[i]) ]) + return true; + } return false; } @@ -448,7 +478,7 @@ switch (get_path_status(path)) { case path::nonexistent: - N(require_existing_path, F("no such file or directory") % path); + N(!require_existing_path, F("no such file or directory: '%s'") % path); walker.visit_file(path); break; case path::file: ======================================================================== --- file_io.hh f104a889390ecd8eb031a56a81862cfef3aec01a +++ file_io.hh 16f383f0e4eb6fa8454fce1071880f066fc69bdb @@ -46,6 +46,7 @@ // returns true if the string content is binary according to monotone heuristic bool guess_binary(std::string const & s); +void set_char_is_binary(char c, bool is_binary); void mkdir_p(any_path const & path); void make_dir_for(any_path const & p); ======================================================================== --- keys.cc 444db9ef45da738d82da852b28e12e3c378b6d7e +++ keys.cc cf21506cfc9735f800dccf4d1c3b575fa97bab90 @@ -474,6 +474,32 @@ calculate_ident(tdat, out); } +// helper to compare if two keys have the same hash +// (ie are the same key) +bool +keys_match(rsa_keypair_id const & id1, + base64 const & key1, + rsa_keypair_id const & id2, + base64 const & key2) +{ + hexenc hash1, hash2; + key_hash_code(id1, key1, hash1); + key_hash_code(id2, key2, hash2); + return hash1 == hash2; +} + +bool +keys_match(rsa_keypair_id const & id1, + base64< arc4 > const & key1, + rsa_keypair_id const & id2, + base64< arc4 > const & key2) +{ + hexenc hash1, hash2; + key_hash_code(id1, key1, hash1); + key_hash_code(id2, key2, hash2); + return hash1 == hash2; +} + void require_password(rsa_keypair_id const & key, app_state & app) ======================================================================== --- keys.hh 3618c073f57fdabfaf53fbf596c4d7d324aa2be5 +++ keys.hh 16c620ec000b13c0ef656a92a59c18660d4c1aaf @@ -72,6 +72,15 @@ base64< arc4 > const & priv, hexenc & out); +bool keys_match(rsa_keypair_id const & id1, + base64 const & key1, + rsa_keypair_id const & id2, + base64 const & key2); +bool keys_match(rsa_keypair_id const & id1, + base64< arc4 > const & key1, + rsa_keypair_id const & id2, + base64< arc4 > const & key2); + #endif // __KEYS_HH__ ======================================================================== --- lua.cc 60a450c0fcb35a460fdfe3a6fe4d74b5dd9612e0 +++ lua.cc f8a4f1818ea770532218416cb55752238c1f3ce3 @@ -1,3 +1,4 @@ +// -*- mode: C++; c-file-style: "gnu"; indent-tabs-mode: nil -*- // copyright (C) 2002, 2003 graydon hoare // all rights reserved. // licensed to the public under the terms of the GNU GPL (>= 2) @@ -19,9 +20,11 @@ #include #include #include +#include #include #include +#include #include "app_state.hh" #include "file_io.hh" @@ -518,11 +521,32 @@ } static int - monotone_guess_binary_for_lua(lua_State *L) + monotone_guess_binary_file_contents_for_lua(lua_State *L) { const char *path = lua_tostring(L, -1); N(path, F("guess_binary called with an invalid parameter")); - lua_pushboolean(L, guess_binary(std::string(path, lua_strlen(L, -1)))); + + std::ifstream file(path, ios_base::binary); + if (!file) + { + lua_pushnil(L); + return 1; + } + const int bufsize = 8192; + char tmpbuf[bufsize]; + string buf; + while(file.good()) + { + file.read(tmpbuf, sizeof(tmpbuf)); + I(file.gcount() <= sizeof(tmpbuf)); + buf.assign(tmpbuf, file.gcount()); + if (guess_binary(buf)) + { + lua_pushboolean(L, true); + return 1; + } + } + lua_pushboolean(L, false); return 1; } @@ -574,6 +598,17 @@ lua_pushboolean(L, true); return 1; } + + static int + monotone_regex_search_for_lua(lua_State *L) + { + const char *re = lua_tostring(L, -2); + const char *str = lua_tostring(L, -1); + boost::cmatch what; + + lua_pushboolean(L, boost::regex_search(str, what, boost::regex(re))); + return 1; + } } @@ -600,9 +635,21 @@ lua_register(st, "wait", monotone_wait_for_lua); lua_register(st, "kill", monotone_kill_for_lua); lua_register(st, "sleep", monotone_sleep_for_lua); - lua_register(st, "guess_binary", monotone_guess_binary_for_lua); + lua_register(st, "guess_binary_file_contents", monotone_guess_binary_file_contents_for_lua); lua_register(st, "include", monotone_include_for_lua); lua_register(st, "includedir", monotone_includedir_for_lua); + + // add regex functions: + lua_newtable(st); + lua_pushstring(st, "regex"); + lua_pushvalue(st, -2); + lua_settable(st, LUA_GLOBALSINDEX); + + lua_pushstring(st, "search"); + lua_pushcfunction(st, monotone_regex_search_for_lua); + lua_settable(st, -3); + + lua_pop(st, 1); } lua_hooks::~lua_hooks() ======================================================================== --- main.cc 0f905ade02dd9188922f3c04700501c6f7d4b57d +++ main.cc ca8383ced00bdb686905f58eaeac7b1446347219 @@ -124,7 +124,8 @@ } #endif -#ifdef MS_STRUCTURED_EXCEPTION_HANDLING +#if defined(MS_STRUCTURED_EXCEPTION_HANDLING) +#if !defined(__BORLANDC__) && !defined(__MINGW32__) struct ms_se_exception { @@ -201,6 +202,7 @@ report_error("unrecognized exception or signal"); } } +#endif #if (defined(__BORLANDC__) && defined(_Windows)) // this works for Borland but not other Win32 compilers (which trap too many cases) @@ -431,7 +433,7 @@ report_error("std::exception: ", ex.what()); } -#if defined(MS_STRUCTURED_EXCEPTION_HANDLING) +#if defined(MS_STRUCTURED_EXCEPTION_HANDLING) && !defined(__BORLANDC__) && !defined(__MINGW32__) catch(ms_se_exception const & ex) { report_ms_se_error(ex.exception_id); ======================================================================== --- monotone.cc eb094c5de51330e85c983f50a0f93ad8dce047eb +++ monotone.cc 21176c710f4d646215c27d82b55f182830d13268 @@ -62,12 +62,12 @@ {"no-merges", 0, POPT_ARG_NONE, NULL, OPT_NO_MERGES, gettext_noop("skip merges when printing logs"), NULL}, {"set-default", 0, POPT_ARG_NONE, NULL, OPT_SET_DEFAULT, gettext_noop("use the current arguments as the future default"), NULL}, {"exclude", 0, POPT_ARG_STRING, &argstr, OPT_EXCLUDE, gettext_noop("leave out branches matching a pattern"), NULL}, - {"unified", 0, POPT_ARG_NONE, NULL, OPT_UNIFIED_DIFF, gettext_noop("Use unified diff format"), NULL}, - {"context", 0, POPT_ARG_NONE, NULL, OPT_CONTEXT_DIFF, gettext_noop("Use context diff format"), NULL}, - {"external", 0, POPT_ARG_NONE, NULL, OPT_EXTERNAL_DIFF, gettext_noop("Use external diff hook for generating diffs"), NULL}, - {"diff-args", 0, POPT_ARG_STRING, &argstr, OPT_EXTERNAL_DIFF_ARGS, gettext_noop("Argument to pass external diff hook"), NULL}, - {"lca", 0, POPT_ARG_NONE, NULL, OPT_LCA, gettext_noop("Use least common ancestor as ancestor for merge"), NULL}, - {"execute", 'e', POPT_ARG_NONE, NULL, OPT_EXECUTE, gettext_noop("Perform the associated file operation"), NULL}, + {"unified", 0, POPT_ARG_NONE, NULL, OPT_UNIFIED_DIFF, gettext_noop("use unified diff format"), NULL}, + {"context", 0, POPT_ARG_NONE, NULL, OPT_CONTEXT_DIFF, gettext_noop("use context diff format"), NULL}, + {"external", 0, POPT_ARG_NONE, NULL, OPT_EXTERNAL_DIFF, gettext_noop("use external diff hook for generating diffs"), NULL}, + {"diff-args", 0, POPT_ARG_STRING, &argstr, OPT_EXTERNAL_DIFF_ARGS, gettext_noop("argument to pass external diff hook"), NULL}, + {"lca", 0, POPT_ARG_NONE, NULL, OPT_LCA, gettext_noop("use least common ancestor as ancestor for merge"), NULL}, + {"execute", 'e', POPT_ARG_NONE, NULL, OPT_EXECUTE, gettext_noop("perform the associated file operation"), NULL}, { NULL, 0, 0, NULL, 0, NULL, NULL } }; @@ -83,7 +83,7 @@ {"version", 0, POPT_ARG_NONE, NULL, OPT_VERSION, gettext_noop("print version number, then exit"), NULL}, {"full-version", 0, POPT_ARG_NONE, NULL, OPT_FULL_VERSION, gettext_noop("print detailed version number, then exit"), NULL}, {"xargs", '@', POPT_ARG_STRING, &argstr, OPT_ARGFILE, gettext_noop("insert command line arguments taken from the given file"), NULL}, - {"ticker", 0, POPT_ARG_STRING, &argstr, OPT_TICKER, gettext_noop("set ticker style (count|dot|none) [count]"), NULL}, + {"ticker", 0, POPT_ARG_STRING, &argstr, OPT_TICKER, gettext_noop("set ticker style (count|dot|none)"), NULL}, {"nostd", 0, POPT_ARG_NONE, NULL, OPT_NOSTD, gettext_noop("do not load standard lua hooks"), NULL}, {"norc", 0, POPT_ARG_NONE, NULL, OPT_NORC, gettext_noop("do not load ~/.monotone/monotonerc or MT/monotonerc lua files"), NULL}, {"rcfile", 0, POPT_ARG_STRING, &argstr, OPT_RCFILE, gettext_noop("load extra rc file"), NULL}, @@ -263,6 +263,7 @@ // Set up secure memory allocation etc Botan::Init::initialize(); + Botan::set_default_allocator("malloc"); // decode all argv values into a UTF-8 array @@ -285,7 +286,7 @@ bool requested_help = false; set used_local_options; - poptSetOtherOptionHelp(ctx(), "[OPTION...] command [ARGS...]\n"); + poptSetOtherOptionHelp(ctx(), _("[OPTION...] command [ARGS...]\n")); try { ======================================================================== --- monotone.texi 3abc599a9ba2f2739baafe5c4b147f7253488761 +++ monotone.texi b9423f2c78e69bf6307613fd2c4efc81427a92b9 @@ -571,11 +571,6 @@ trusted medium, in person, or via a trusted third party. Advanced secure key exchange techniques are beyond the scope of this document. -Most of monotone's certs refer to revision IDs. Some certs may refer -to file IDs or manifest IDs, depending on context. This capability may -also be removed in the future, at which point certs will @emph{only} -refer to revisions. - @page @node Storage and workflow @section Storage and workflow @@ -1145,8 +1140,9 @@ @smallexample @group $ monotone --db=~/jim.db genkey jim@@juicebot.co.jp +monotone: generating key-pair 'jim@@juicebot.co.jp' enter passphrase for key ID [jim@@juicebot.co.jp] : @i{} -monotone: generating key-pair 'jim@@juicebot.co.jp' +confirm passphrase for key ID [jim@@juicebot.co.jp]: @i{} monotone: storing key-pair 'jim@@juicebot.co.jp' in database @end group @end smallexample @@ -1156,8 +1152,9 @@ @smallexample @group $ monotone --db=~/abe.db genkey abe@@juicebot.co.jp +monotone: generating key-pair 'abe@@juicebot.co.jp' enter passphrase for key ID [abe@@juicebot.co.jp] : @i{} -monotone: generating key-pair 'abe@@juicebot.co.jp' +confirm passphrase for key ID [abe@@juicebot.co.jp]: @i{} monotone: storing key-pair 'abe@@juicebot.co.jp' in database @end group @end smallexample @@ -1167,8 +1164,9 @@ @smallexample @group $ monotone --db=~/beth.db genkey beth@@juicebot.co.jp +monotone: generating key-pair 'beth@@juicebot.co.jp' enter passphrase for key ID [beth@@juicebot.co.jp] : @i{} -monotone: generating key-pair 'beth@@juicebot.co.jp' +confirm passphrase for key ID [beth@@juicebot.co.jp]: @i{} monotone: storing key-pair 'beth@@juicebot.co.jp' in database @end group @end smallexample @@ -1246,11 +1244,13 @@ @file{MT/options}, so you don't have to keep passing them to monotone all the time. -Jim creates his working copy: +He chooses @code{jp.co.juicebot.jb7} as a branch name. (See address@hidden Conventions} for more information about appropriate branch +names.) Jim then creates his working copy: @smallexample @group -/home/jim$ monotone --db=jim.db setup juice +/home/jim$ monotone --db=jim.db --branch=jp.co.juicebot.jb7 setup juice /home/jim$ cd juice /home/jim/juice$ @end group @@ -1409,8 +1409,9 @@ # from [] # to [e8f147e5b4d5667f3228b7bba1c5c1e639f5db9f] # +============================================================================ --- include/jb.h -+++ include/jb.h ++++ include/jb.h 3b12b2d0b31439bd50976633db1895cff8b19da0 @@ -0,0 +1,13 @@ +/* Standard JuiceBot hw interface */ + @@ -1425,8 +1426,9 @@ +#define BANANA_SPOUT 0x7f +void dispense_apple_juice (); +void dispense_banana_juice (); +============================================================================ --- src/apple.c -+++ src/apple.c ++++ src/apple.c 2650ffc660dd00a08b659b883b65a060cac7e560 @@ -0,0 +1,7 @@ +#include "jb.h" + @@ -1435,8 +1437,9 @@ address@hidden + /* Fill this in please, Abe. */ address@hidden +============================================================================ --- src/banana.c -+++ src/banana.c ++++ src/banana.c e8f147e5b4d5667f3228b7bba1c5c1e639f5db9f @@ -0,0 +1,7 @@ +#include "jb.h" + @@ -1452,18 +1455,17 @@ @node Committing Work @section Committing Work -Satisfied with the work he's done, Jim wants to save his changes. He -chooses @code{jp.co.juicebot.jb7} as a branch name. (See @ref{Naming -Conventions} for more information about appropriate branch names.) He +Satisfied with the work he's done, Jim wants to save his changes. He then commits his working copy, which causes monotone to process the address@hidden/work} file and record the file contents, manifest, and revision -into the database. Since he didn't give a branch when he ran address@hidden, he has to do so now; monotone will remember the branch -and re-use it for future commits automatically. address@hidden/work} file and record the file contents, manifest, and +revision into the database. Since he provided a branch name when he +ran @command{setup}, monotone will use this as the default branch name +when he commits. + @smallexample @group -$ monotone --branch=jp.co.juicebot.jb7 commit --message="initial checkin of project" +$ monotone commit --message="initial checkin of project" monotone: beginning commit on branch 'jp.co.juicebot.jb7' monotone: committed revision 2e24d49a48adf9acf3a1b6391a080008cbef9c21 @end group @@ -1602,7 +1604,7 @@ @smallexample @group -$ monotone --db=~/jim.db read ~/abe.pubkey ~/beth.pubkey +$ cat ~/abe.pubkey ~/beth.pubkey | monotone --db=~/jim.db read monotone: read 2 packets @end group @end smallexample @@ -1651,10 +1653,18 @@ @smallexample @group -monotone --db=abe.db sync jim-laptop.juicebot.co.jp "jp.co.juicebot.jb7*" -monotone: rebuilding merkle trees ... +$ monotone --db=abe.db sync jim-laptop.juicebot.co.jp "jp.co.juicebot.jb7*" +monotone: setting default server to jim-laptop.juicebot.co.jp +monotone: setting default branch include pattern to 'jp.co.juicebot.jb7*' +monotone: setting default branch exclude pattern to '' monotone: connecting to jim-laptop.juicebot.co.jp -monotone: [bytes in: 3200] [bytes out: 673] +monotone: first time connecting to server jim-laptop.juicebot.co.jp:5253 +monotone: I'll assume it's really them, but you might want to double-check +monotone: their key's fingerprint: 9e9e9ef1d515ad58bfaa5cf282b4a872d8fda00c +monotone: warning: saving public key for jim@@juicebot.co.jp to database +monotone: finding items to synchronize: +monotone: bytes in | bytes out | revs in | revs out | revs written +monotone: 2587 | 1025 | 1 | 0 | 1 monotone: successful exchange with jim-laptop.juicebot.co.jp @end group @end smallexample @@ -1726,8 +1736,9 @@ # from [2650ffc660dd00a08b659b883b65a060cac7e560] # to [e2c418703c863eabe70f9bde988765406f885fd0] # ---- src/apple.c -+++ src/apple.c +============================================================================ +--- src/apple.c 2650ffc660dd00a08b659b883b65a060cac7e560 ++++ src/apple.c e2c418703c863eabe70f9bde988765406f885fd0 @@ -1,7 +1,10 @@ #include "jb.h" @@ -1749,7 +1760,6 @@ @group $ monotone commit monotone: beginning commit on branch 'jp.co.juicebot.jb7' -monotone: commited revision 70decb4b31a8227a629c0e364495286c5c75f979 @end group @end smallexample @@ -1797,12 +1807,13 @@ @smallexample @group -$ monotone sync jim-laptop.juicebot.co.jp "jp.co.juicebot.jb7*" -monotone: rebuilding merkle trees ... -monotone: including branch jp.co.juicebot.jb7 -monotone: [keys: 2] [rcerts: 8] +$ monotone sync monotone: connecting to jim-laptop.juicebot.co.jp -monotone: [bytes in: 630] [bytes out: 2844] +monotone: finding items to synchronize: +monotone: certs | keys | revisions +monotone: 8 | 2 | 2 +monotone: bytes in | bytes out | revs in | revs out | revs written +monotone: 615 | 2822 | 0 | 1 | 0 monotone: successful exchange with jim-laptop.juicebot.co.jp @end group @end smallexample @@ -1813,9 +1824,20 @@ @smallexample @group $ monotone --db=beth.db sync jim-laptop.juicebot.co.jp "jp.co.juicebot.jb7*" -monotone: rebuilding merkle trees ... +monotone: setting default server to jim-laptop.juicebot.co.jp +monotone: setting default branch include pattern to 'jp.co.juicebot.jb7*' +monotone: setting default branch exclude pattern to '' monotone: connecting to jim-laptop.juicebot.co.jp -monotone: [bytes in: 3200] [bytes out: 673] +monotone: first time connecting to server jim-laptop.juicebot.co.jp:5253 +monotone: I'll assume it's really them, but you might want to double-check +monotone: their key's fingerprint: 9e9e9ef1d515ad58bfaa5cf282b4a872d8fda00c +monotone: warning: saving public key for jim@@juicebot.co.jp to database +monotone: finding items to synchronize: +monotone: bytes in | bytes out | revs in | revs out | revs written +monotone: 4601 | 1239 | 2 | 0 | 1 +monotone: verifying new revisions (this may take a while) +monotone: bytes in | bytes out | revs in | revs out | revs written +monotone: 4601 | 1285 | 2 | 0 | 2 monotone: successful exchange with jim-laptop.juicebot.co.jp @end group @end smallexample @@ -1864,12 +1886,13 @@ @smallexample @group -$ monotone sync jim-laptop.juicebot.co.jp "jp.co.juicebot.jb7*" -monotone: rebuilding merkle trees ... -monotone: including branch jp.co.juicebot.jb7 -monotone: [keys: 3] [rcerts: 12] +$ monotone sync monotone: connecting to jim-laptop.juicebot.co.jp -monotone: [bytes in: 630] [bytes out: 2844] +monotone: finding items to synchronize: +monotone: certs | keys | revisions +monotone: 12 | 3 | 3 +monotone: bytes in | bytes out | revs in | revs out | revs written +monotone: 709 | 2879 | 0 | 1 | 0 monotone: successful exchange with jim-laptop.juicebot.co.jp @end group @end smallexample @@ -1940,8 +1963,9 @@ # from [7381d6b3adfddaf16dc0fdb05e0f2d1873e3132a] # to [5e6622cf5c8805bcbd50921ce7db86dad40f2ec6] # ---- src/banana.c -+++ src/banana.c +============================================================================ +--- src/banana.c 7381d6b3adfddaf16dc0fdb05e0f2d1873e3132a ++++ src/banana.c 5e6622cf5c8805bcbd50921ce7db86dad40f2ec6 @@ -1,10 +1,15 @@ #include "jb.h" @@ -1979,7 +2003,7 @@ @smallexample @group -$ monotone sync jim-laptop.juicebot.co.jp jp.co.juicebot.jb7 +$ monotone sync @end group @end smallexample @@ -2010,7 +2034,7 @@ @smallexample @group -$ monotone sync jim-laptop.juicebot.co.jp jp.co.juicebot.jb7 +$ monotone sync @end group @end smallexample @@ -2036,10 +2060,11 @@ @smallexample @group $ monotone merge -monotone: merging with revision 1 / 2 +monotone: starting with revision 1 / 2 +monotone: merging with revision 2 / 2 monotone: [source] 39969614e5a14316c7ffefc588771f491c709152 monotone: [source] 8b41b5399a564494993063287a737d26ede3dee4 -monotone: common ancestor 70decb4b31a8227a629c0e364495286c5c75f979 found +monotone: common ancestor 70decb4b31a8227a629c0e364495286c5c75f979 abe@@juicebot.co.jp 2004-10-26T:02:50:01 found monotone: trying 3-way merge monotone: [merged] da499b9d9465a0e003a4c6b2909102ef98bf4e6d monotone: your working copies have not been updated @@ -2156,7 +2181,9 @@ monotone: propagating jp.co.juicebot.jb7 -> jp.co.juicebot.jb7.muffins monotone: [source] da003f115752ac6e4750b89aaca9dbba178ac80c monotone: [target] d0e5c93bb61e5fd25a0dadf41426f209b73f40af -monotone: common ancestor 853b8c7ac5689181d4b958504adfb5d07fd959ab found +monotone: common ancestor 853b8c7ac5689181d4b958504adfb5d07fd959ab jim@@juicebot.co.jp 2004-10-26T:12:44:23 found +monotone: trying 3-way merge +monotone: [merged] 89585b3c5e51a5a75f5d1a05dda859c5b7dde52f @end group @end smallexample @@ -2164,15 +2191,16 @@ another. When the muffins code is eventually stable and ready to be integrated -into the main line of development, she simple propagates the other way: +into the main line of development, she simply propagates the other way: @smallexample @group $ monotone propagate jp.co.juicebot.jb7.muffins jp.co.juicebot.jb7 -monotone: propagating jp.co.juicebot.jb7 -> jp.co.juicebot.jb7.muffins +monotone: propagating jp.co.juicebot.jb7.muffins -> jp.co.juicebot.jb7 monotone: [source] 4e48e2c9a3d2ca8a708cb0cc545700544efb5021 monotone: [target] bd29b2bfd07644ab370f50e0d68f26dcfd3bb4af -monotone: common ancestor 652b1035343281a0d2a5de79919f9a31a30c9028 found +monotone: common ancestor 652b1035343281a0d2a5de79919f9a31a30c9028 jim@@juicebot.co.jp 2004-10-26T:15:25:05 found +monotone: [merged] 03f7495b51cc70b76872ed019d19dee1b73e89b6 @end group @end smallexample @@ -2682,6 +2710,13 @@ @item .mt-attrs Contains versioned attributes of files, associated with the files' pathnames. address@hidden .mt-ignore +Contains a list of patterns, one per line. If it exists, any file with a name +matching one of these patterns is ignored. address@hidden MT/wanted-testresults +Contains a list of testresult key names, one per line. If it exists, update +will only select revisions that do not have regressions according to the given +testresult keys. @item MT/revision Contains the identity of the ``base'' revision of the working copy. Each working copy has a base revision. When the working copy is @@ -3314,20 +3349,18 @@ @section Tree @ftable @command address@hidden monotone cat file @var{id} address@hidden monotone cat file @var{rid} @var{path} address@hidden monotone cat manifest address@hidden monotone cat manifest @var{id} address@hidden monotone cat revision address@hidden monotone cat revision @var{id} address@hidden monotone cat @var{path} address@hidden monotone cat address@hidden @var{path} -These commands write the contents of a specific file, manifest or -revision @var{id} to standard output, or the contents of the file address@hidden as it was at revision @var{rid}. They are useful if you wish -to inspect a version without checking it out into your working copy. An -unspecified manifest or revision @var{id} is allowed from within a -working copy and refers to the current manifest or revision. +Write the contents of a specific file @var{path} to standard output. +Without a @option{--revision} argument, the command outputs the +contents of @var{path} as found in the current revision. This requires +the command be executed from within a working copy. + +With an explicit @option{--revision} argument, the command outputs +contents of @var{path} at that revision. + @item monotone checkout address@hidden @var{directory} @itemx monotone co address@hidden @var{directory} @itemx monotone address@hidden checkout @var{directory} @@ -3922,7 +3955,7 @@ @smallexample @group -$ ./monotone list certs 4a96 +$ monotone list certs 4a96 monotone: expandeding partial id '4a96' monotone: expanded to '4a96a230293456baa9c6e7167cafb3c5b52a8e7f' ----------------------------------------------------------------- @@ -5294,6 +5327,188 @@ @end table address@hidden monotone automate get_revision address@hidden monotone automate get_revision @var{id} + address@hidden @strong address@hidden Arguments: + +Specifying the option @var{id} argument outputs the changeset +information for the specified @var{id}. Otherwise, @var{id} is +determined from the working directory. + address@hidden Added in: + +1.0 + address@hidden Purpose: + +Prints changeset information for the specified revision id. + +There are several changes that are described; each of these is described by +a different basic_io stanza. The first string pair of each stanza indicates the +type of change represented. + +Possible values of this first value are along with an ordered list of +basic_io formatted string pairs that will be provided are: + address@hidden +'old_revision' + represents a parent revision. + format: ('old_revision', revision id) +'new_manifest' + represents the new manifest associated with the revision. + format: ('new_manifest', manifest id) +'old_manifest' + represents a manifest associated with a parent revision. + format: ('old_manifest', manifest id) +'patch' + represents a file that was modified. + format: ('patch', filename), ('from', file id), ('to', file id) +'add_file' + represents a file that was added. + format: ('add_file', filename) +'delete_file' + represents a file that was deleted. + format: ('delete_file', filename) +'delete_dir' + represents a directory that was deleted. + format: ('delete_dir', filename) +'rename_file' + represents a file that was renamed. + format: ('rename_file', old filename), ('to', new filename) +'rename_dir' + represents a directory that was renamed. + format: ('rename_dir', old filename), ('to', new filename) address@hidden verbatim + address@hidden Sample output: + address@hidden +new_manifest [bfe2df785c07bebeb369e537116ab9bb7a4b5e19] + +old_revision [429fea55e9e819a046843f618d90674486695745] +old_manifest [b71855116f7049ac663102c0cb628653ffe316d1] + +patch "ChangeLog" + from [7dc21d3a46c6ecd94685ab21e67b131b32002f12] + to [234513e3838d423b24d5d6c98f70ce995c8bab6e] + +patch "std_hooks.lua" + from [0408707bb6b97eae7f8da61af7b35364dbd5a189] + to [d7bd0756c48ace573926197709e53eb24dae5f5f] address@hidden verbatim + address@hidden Output format: + +All stanzas are formatted by basic_io. Stanzas are seperated +by a blank line. Values will be escaped, '\' to '\\' and +'"' to '\"'. + address@hidden Error conditions: + +If the revision specified is unknown or invalid prints an error message +to stderr and exits with status 1. + address@hidden table + address@hidden monotone automate get_manifest address@hidden monotone automate get_manifest @var{id} + address@hidden @strong address@hidden Arguments: + +Specifying the optional @var{id} argument outputs the maifest for the +specified @var{id}. Otherwise, @var{id} is determined from the working +directory. + address@hidden Added in: + +1.0 + address@hidden Purpose: + +Prints the contents of the manifest associated with the given manifest ID. + address@hidden Sample output: + address@hidden +e3915658cb464d05f21332e03d30dca5d94fe776 .htaccess +00ff89c69e7a8f6a0f48c6503168d9b62a0cfeb0 .mt-attrs +80d8f3f75c9b517ec462233e155f7dfb93379f67 AUTHORS +fc74a48c7f73eedcbe1ea709755fbe819b29736c ChangeLog +dfac199a7539a404407098a2541b9482279f690d LICENSE +440eec971e7bb61ccbb61634deb2729bb25931cd README +e0ea26c666b37c5f98ccf80cb933d021ee55c593 TODO +b28ece354969314ce996f3030569215d685973d6 branch.psp +1fdb62e05fb2a9338d2c72ddc58de3ab2b3976fe common.py +64cb5898e3a026b4782c343ca4386585e0c3c275 config.py.example +7152c3ff110418aca5d23c374ea9fb92a0e98379 error.psp +5d8536100fdf51d505b6f20bc9c16aa78d4e86a8 fileinbranch.psp +981df124a0b5655a9f78c42504cfa8c6f02b267a headofbranch.psp +a43d0588a69e622b2afc681678c2a5c3b3b1f342 help.psp +18a8bffc8729d7bfd71d2e0cb35a1aed1854fa74 html.py +c621827db187839e1a7c6e51d5f1a7f6e0aa560c index.psp +708b61436dce59f47bd07397ce96a1cfabe81970 monotone.py +a02b1c161006840ea8685e461fd07f0e9bb145a3 revision.psp +027515fd4558abf317d54c437b83ec6bc76e3dd8 rss_feed.gif +638140d6823eee5844de37d985773be75707fa25 tags.psp +be83f459a152ffd49d89d69555f870291bc85311 tarofbranch.psp +fb51955563d64e628e0e67e4acca1a1abc4cd989 utility.py +8d04b3fc352a860b0e3240dcb539c1193705398f viewmtn.css +7cb5c6b1b1710bf2c0fa41e9631ae43b03424a35 viewmtn.py +530290467a99ca65f87b74f653bf462b28c6cda9 wrapper.py address@hidden verbatim + address@hidden Output format: + +The output format is one line for each file in the manifest. Each line begins +with a 40 character file ID, followed by two space characters (' ') and then +the filename. + address@hidden Error conditions: + +If the manifest ID specified is unknown or invalid prints an error +message to stderr and exits with status 1. + address@hidden table + address@hidden monotone automate get_file @var{id} + address@hidden @strong address@hidden Arguments: + +The @var{id} argument specifies the file to be output. + address@hidden Added in: + +1.0 + address@hidden Purpose: + +Prints the contents of the specified file. + address@hidden Sample output: + address@hidden +If you've downloaded a release, see INSTALL for installation +instructions. If you've checked this out, the generated files are not +included, and you must use "autoreconf --install" to create them. + +"make html" for docs, or read the .info file and / or man page. address@hidden verbatim + address@hidden Output format: + +The file contents are output without modification. + address@hidden Error conditions: + +If the file id specified is unknown or invalid prints an error message +to stderr and exits with status 1. + address@hidden table + @end ftable @page ======================================================================== --- netsync.cc f3c3491e4db786749296f7f3e3b3461521191101 +++ netsync.cc 1a08b80949f7458e7868d09b0647dbdfd2f5d645 @@ -2222,7 +2222,7 @@ } else { - throw bad_decode(F("public key '%s' does not exist in our database") % hitem); + throw bad_decode(F("no public key '%s' found in database") % hitem); } break; ======================================================================== --- packet.cc ac38aac6e3209972c9417388914ddc795ed4a53a +++ packet.cc 407e15cf1c485e09665a372588be2f99491a17d7 @@ -17,6 +17,7 @@ #include "revision.hh" #include "sanity.hh" #include "transforms.hh" +#include "keys.hh" using namespace std; using boost::shared_ptr; @@ -982,7 +983,7 @@ { base64 tmp; pimpl->app.db.get_key(ident, tmp); - if (!(tmp() == k())) + if (!keys_match(ident, tmp, ident, k)) W(F("key '%s' is not equal to key '%s' in database\n") % ident % ident); L(F("skipping existing public key %s\n") % ident); } ======================================================================== --- paths.cc 83dd54b6c048d9b009bbf910be0e8e4a994996c0 +++ paths.cc 3ea54d2be240cc811a52130f6711f3c3ae410763 @@ -73,6 +73,7 @@ initial_abs_path.set(system_path(get_current_working_dir()), false); // We still use boost::fs, so let's continue to initialize it properly. fs::initial_path(); + fs::path::default_name_check(fs::native); L(F("initial abs path is: %s") % initial_abs_path.get_but_unused()); } @@ -231,15 +232,15 @@ // - [] // - ["foo", ""] // - ["", "bar"] -file_path::file_path(std::vector const & pieces) +file_path::file_path(split_path const & sp) { - std::vector::const_iterator i = pieces.begin(); - I(i != pieces.end()); - if (pieces.size() > 1) + split_path::const_iterator i = sp.begin(); + I(i != sp.end()); + if (sp.size() > 1) I(!null_name(*i)); std::string tmp = pc_interner.lookup(*i); I(tmp != bookkeeping_root.as_internal()); - for (++i; i != pieces.end(); ++i) + for (++i; i != sp.end(); ++i) { I(!null_name(*i)); tmp += "/"; @@ -269,9 +270,9 @@ // change_set.cc is rewritten, however, you should revisit the semantics of // this function. void -file_path::split(std::vector & pieces) const +file_path::split(split_path & sp) const { - pieces.clear(); + sp.clear(); if (empty()) return; std::string::size_type start, stop; @@ -282,10 +283,10 @@ stop = s.find('/', start); if (stop < 0 || stop > s.length()) { - pieces.push_back(pc_interner.intern(s.substr(start))); + sp.push_back(pc_interner.intern(s.substr(start))); break; } - pieces.push_back(pc_interner.intern(s.substr(start, stop - start))); + sp.push_back(pc_interner.intern(s.substr(start, stop - start))); start = stop + 1; } } @@ -335,7 +336,7 @@ return false; if (path[0] == '/') return true; -#ifdef _WIN32 +#ifdef WIN32 if (path[0] == '\\') return true; if (path.size() > 1 && path[1] == ':') @@ -433,12 +434,12 @@ find_and_go_to_working_copy(system_path const & search_root) { // unimplemented - fs::path root = search_root.as_external(); - fs::path bookdir = bookkeeping_root.as_external(); - fs::path current = fs::initial_path(); + fs::path root(search_root.as_external(), fs::native); + fs::path bookdir(bookkeeping_root.as_external(), fs::native); + fs::path current(fs::initial_path()); fs::path removed; fs::path check = current / bookdir; - + L(F("searching for '%s' directory with root '%s'\n") % bookdir.string() % root.string()); @@ -675,7 +676,7 @@ "//blah", "\\foo", "c:\\foo", -#ifdef _WIN32 +#ifdef WIN32 "c:foo", "c:/foo", #endif @@ -714,7 +715,7 @@ check_fp_normalizes_to("../..", ""); check_fp_normalizes_to("MT/foo", "a/b/MT/foo"); check_fp_normalizes_to("MT", "a/b/MT"); -#ifndef _WIN32 +#ifndef WIN32 check_fp_normalizes_to("c:foo", "a/b/c:foo"); check_fp_normalizes_to("c:/foo", "a/b/c:/foo"); #endif @@ -805,15 +806,16 @@ "", "a:b", 0 }; - + std::string tmp_path_string; + for (char const ** c = baddies; *c; ++c) { L(F("test_bookkeeping_path baddie: trying '%s'") % *c); - BOOST_CHECK_THROW(bookkeeping_path(std::string(*c)), std::logic_error); - BOOST_CHECK_THROW(bookkeeping_root / std::string(*c), std::logic_error); + BOOST_CHECK_THROW(bookkeeping_path(tmp_path_string.assign(*c)), std::logic_error); + BOOST_CHECK_THROW(bookkeeping_root / tmp_path_string.assign(*c), std::logic_error); } - BOOST_CHECK_THROW(bookkeeping_path(std::string("foo/bar")), std::logic_error); - BOOST_CHECK_THROW(bookkeeping_path(std::string("a")), std::logic_error); + BOOST_CHECK_THROW(bookkeeping_path(tmp_path_string.assign("foo/bar")), std::logic_error); + BOOST_CHECK_THROW(bookkeeping_path(tmp_path_string.assign("a")), std::logic_error); check_bk_normalizes_to("a", "MT/a"); check_bk_normalizes_to("foo", "MT/foo"); @@ -840,7 +842,7 @@ check_system_normalizes_to("foo/bar", "/a/b/foo/bar"); check_system_normalizes_to("/foo/bar", "/foo/bar"); check_system_normalizes_to("//foo/bar", "//foo/bar"); -#ifdef _WIN32 +#ifdef WIN32 check_system_normalizes_to("c:foo", "c:foo"); check_system_normalizes_to("c:/foo", "c:/foo"); check_system_normalizes_to("c:\\foo", "c:\\foo"); @@ -871,7 +873,7 @@ BOOST_CHECK(tilde_expanded[0] == '/'); BOOST_CHECK(tilde_expanded.find('~') == std::string::npos); // and check for the weird WIN32 version -#ifdef _WIN32 +#ifdef WIN32 std::string tilde_expanded2 = system_path("~this_user_does_not_exist_anywhere").as_external(); BOOST_CHECK(tilde_expanded2[0] = '/'); BOOST_CHECK(tilde_expanded.find('~') == std::string::npos); @@ -899,7 +901,8 @@ BOOST_CHECK(working_root.used); BOOST_CHECK(system_path(file_path_external(std::string("foo/bar"))).as_external() == "/working/root/rel/initial/foo/bar"); - BOOST_CHECK(system_path(file_path()).as_external() + file_path a_file_path; + BOOST_CHECK(system_path(a_file_path).as_external() == "/working/root"); BOOST_CHECK(system_path(bookkeeping_path("MT/foo/bar")).as_internal() == "/working/root/MT/foo/bar"); ======================================================================== --- paths.hh 0c935d21c18770ef295b3580e53b9171e124c80a +++ paths.hh 62c42e07a3d83608626a02cf57f7148c5c66b5a2 @@ -96,6 +96,12 @@ // F("my path is %s") % my_path // i.e., nothing fancy necessary, for purposes of F() just treat it like // it were a string +// +// +// There is also one "not really a path" type, 'split_path'. This is a vector +// of path_component's, and semantically equivalent to a file_path -- +// file_path's can be split into split_path's, and split_path's can be joined +// into file_path's. #include @@ -107,6 +113,8 @@ typedef u32 path_component; +typedef std::vector split_path; + const path_component the_null_component = 0; inline bool @@ -145,12 +153,12 @@ public: file_path() {} // join a file_path out of pieces - file_path(std::vector const & pieces); + file_path(split_path const & sp); // this currently doesn't do any normalization or anything. file_path operator /(std::string const & to_append) const; - void split(std::vector & pieces) const; + void split(split_path & sp) const; bool operator ==(const file_path & other) const { return data == other.data; } ======================================================================== --- po/Makevars ba95e10f69eae3e0645b3146a2c70bfc991a0481 +++ po/Makevars 9f9d9179aaa8771ab4ddd5300c063d6a2f9e2f11 @@ -8,7 +8,8 @@ top_builddir = .. # These options get passed to xgettext. -XGETTEXT_OPTIONS = --keyword=F --keyword=FP:1,2 --keyword=_ --keyword=N_:1,2 +# the second --flag=FP option is ineffective, because of a bug in gettext. +XGETTEXT_OPTIONS = --keyword=F --keyword=FP:1,2 --keyword=_ --keyword=N_ --flag=F:1:c-format --flag=FP:1:c-format --flag=FP:2:c-format # This is the copyright holder that gets inserted into the header of the # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding ======================================================================== --- po/fr.po 41fc7b72e3b2c116bdded67313dde960bae9eea4 +++ po/fr.po 2385bcc193a5aa321863cda06106737be42a1bee @@ -6,8 +6,8 @@ msgstr "" "Project-Id-Version: monotone 0.22\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2005-08-26 09:57+0200\n" -"PO-Revision-Date: 2005-08-26 04:07+0200\n" +"POT-Creation-Date: 2005-09-06 03:04+0200\n" +"PO-Revision-Date: 2005-09-06 03:22+0200\n" "Last-Translator: Benoît Dejean \n" "Language-Team: Benoît Dejean \n" "MIME-Version: 1.0\n" @@ -15,154 +15,118 @@ "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n>1;\n" -#: ../app_state.cc:58 +#: ../app_state.cc:51 #, c-format msgid "initializing from directory %s\n" msgstr "" -#: ../app_state.cc:59 +#: ../app_state.cc:62 #, c-format -msgid "found working copy directory %s\n" -msgstr "" - -#: ../app_state.cc:61 -#, c-format -msgid "cannot change to directory to %s\n" -msgstr "" - -#: ../app_state.cc:69 -#, c-format msgid "branch name is '%s'\n" msgstr "le nom de la branche est « %s »\n" -#: ../app_state.cc:75 +#: ../app_state.cc:69 #, c-format -msgid "relative directory is '%s'\n" -msgstr "" - -#: ../app_state.cc:82 -#, c-format msgid "setting dump path to %s\n" msgstr "" -#: ../app_state.cc:93 +#: ../app_state.cc:83 #, c-format msgid "working copy directory required but not found%s%s" msgstr "" -#: ../app_state.cc:101 -msgid "invalid directory ''" -msgstr "" - -#: ../app_state.cc:105 +#: ../app_state.cc:91 #, c-format -msgid "cannot change to initial directory %s\n" +msgid "invalid directory ''" msgstr "" -#: ../app_state.cc:109 +#: ../app_state.cc:93 #, c-format -msgid "create working copy in %s\n" +msgid "creating working copy in %s\n" msgstr "création d'une copie de travail dans %s\n" -#: ../app_state.cc:120 +#: ../app_state.cc:99 #, c-format -msgid "could not create directory: %s: %s\n" -msgstr "impossible de créer le dossier : %s : %s\n" - -#: ../app_state.cc:125 -#, c-format -msgid "cannot change to new directory %s\n" +msgid "monotone bookkeeping directory '%s' already exists in '%s'\n" msgstr "" -#: ../app_state.cc:134 +#: ../app_state.cc:102 #, c-format -msgid "monotone book-keeping directory '%s' already exists in '%s'\n" +msgid "creating bookkeeping directory '%s' for working copy in '%s'\n" msgstr "" -#: ../app_state.cc:137 +#: ../app_state.cc:132 #, c-format -msgid "creating book-keeping directory '%s' for working copy in '%s'\n" -msgstr "" - -#: ../app_state.cc:159 -#, c-format -msgid "'%s' prefixed to '%s'\n" -msgstr "" - -#: ../app_state.cc:178 -#, c-format msgid "'%s' ignored by restricted path set\n" msgstr "" -#: ../app_state.cc:183 +#: ../app_state.cc:137 #, c-format msgid "unknown path '%s'\n" msgstr "chemin inconnu « %s »\n" -#: ../app_state.cc:185 +#: ../app_state.cc:139 #, c-format msgid "'%s' added to restricted path set\n" msgstr "" -#: ../app_state.cc:226 +#: ../app_state.cc:178 #, c-format msgid "checking restricted path set for '%s'\n" msgstr "" -#: ../app_state.cc:233 +#: ../app_state.cc:185 #, c-format msgid "path '%s' found in restricted path set; '%s' included\n" msgstr "" -#: ../app_state.cc:239 +#: ../app_state.cc:191 #, c-format msgid "path '%s' not found in restricted path set; '%s' excluded\n" msgstr "" -#: ../app_state.cc:298 -#, c-format -msgid "search root '%s' does not exist\n" -msgstr "" +#: ../app_state.cc:248 +#, fuzzy, c-format +msgid "search root '%s' does not exist" +msgstr "le fichier rc « %s » n'existe pas" -#: ../app_state.cc:300 +#: ../app_state.cc:249 #, c-format msgid "search root '%s' is not a directory\n" msgstr "" -#: ../app_state.cc:301 +#: ../app_state.cc:251 #, c-format msgid "set search root to %s\n" msgstr "" -#: ../app_state.cc:332 +#: ../app_state.cc:282 +#, c-format msgid "negative depth not allowed\n" -msgstr "" +msgstr "profondeur négative interdite\n" -#: ../app_state.cc:340 +#: ../app_state.cc:290 +#, c-format msgid "negative or zero last not allowed\n" msgstr "" -#: ../app_state.cc:449 +#: ../app_state.cc:399 #, c-format msgid "Failed to read options file %s" msgstr "" -#: ../app_state.cc:466 +#: ../app_state.cc:416 #, c-format msgid "Failed to write options file %s" msgstr "" -#: ../basic_io.cc:26 +#: ../basic_io.cc:26 ../basic_io.cc:27 #, c-format msgid "error in %s:%d:%d:E: %s" msgstr "" -#: ../basic_io.cc:27 +#: ../cert.cc:49 #, c-format -msgid "%s:%d:%d:E: %s" -msgstr "" - -#: ../cert.cc:49 msgid "cert ok\n" msgstr "certificat OK\n" @@ -211,7 +175,7 @@ msgid "cert: signable text %s\n" msgstr "" -#: ../cert.cc:364 ../keys.cc:482 +#: ../cert.cc:364 ../keys.cc:508 #, c-format msgid "no private key '%s' found in database or get_priv_key hook" msgstr "" @@ -222,6 +186,7 @@ msgstr "" #: ../cert.cc:477 +#, c-format msgid "no branch found for empty revision, please provide a branch name" msgstr "" @@ -236,8 +201,9 @@ "multiple branch certs found for revision %s, please provide a branch name" msgstr "" -#: ../cert.cc:507 ../rcs_import.cc:1234 ../revision.cc:1592 -#: ../revision.cc:1624 +#: ../cert.cc:507 ../rcs_import.cc:1231 ../revision.cc:1594 +#: ../revision.cc:1626 +#, c-format msgid "no unique private key for cert construction" msgstr "" @@ -246,17 +212,18 @@ msgid "no default author name for branch '%s'" msgstr "" -#: ../change_set.cc:290 +#: ../change_set.cc:289 #, c-format msgid "tid %d: parent %d, type %s, name %s\n" msgstr "" -#: ../change_set.cc:316 +#: ../change_set.cc:315 #, c-format msgid "%d -> %d\n" msgstr "" #: ../change_set.cc:1540 +#, c-format msgid "concatenating change sets\n" msgstr "" @@ -292,6 +259,7 @@ msgstr "" #: ../change_set.cc:1628 +#, c-format msgid "finished concatenation\n" msgstr "" @@ -336,10 +304,12 @@ msgstr "" #: ../change_set.cc:1880 +#, c-format msgid "conflict detected, resolved in A's favour\n" msgstr "conflit détecté, résolu en faveur de A\n" #: ../change_set.cc:1886 +#, c-format msgid "conflict detected, resolved in B's favour\n" msgstr "conflit détecté, résolu en faveur de B\n" @@ -419,14 +389,17 @@ msgstr "" #: ../change_set.cc:2249 +#, c-format msgid "merging change sets\n" msgstr "" #: ../change_set.cc:2311 +#, c-format msgid "finished merge\n" msgstr "" #: ../change_set.cc:2330 +#, c-format msgid "inverting change set\n" msgstr "" @@ -450,65 +423,68 @@ msgid "inverse is delta %s -> %s on %s\n" msgstr "" -#: ../change_set.cc:2448 ../change_set.cc:2497 +#: ../change_set.cc:2447 ../change_set.cc:2495 #, c-format msgid "moving file %s -> %s\n" msgstr "déplacement du fichier %s -> %s\n" -#: ../change_set.cc:2455 ../change_set.cc:2505 +#: ../change_set.cc:2454 ../change_set.cc:2503 #, c-format msgid "moving dir %s -> %s\n" msgstr "déplacement du dossier %s -> %s\n" -#: ../commands.cc:138 +#: ../commands.cc:136 #, c-format msgid "expanding command '%s'\n" msgstr "" -#: ../commands.cc:155 +#: ../commands.cc:153 #, c-format msgid "expanded command to '%s'\n" msgstr "" -#: ../commands.cc:160 +#: ../commands.cc:158 #, c-format -msgid "command '%s' has multiple ambiguous expansions: \n" +msgid "command '%s' has multiple ambiguous expansions:\n" msgstr "" -#: ../commands.cc:203 +#: ../commands.cc:201 msgid "commands:" msgstr "commandes :" -#: ../commands.cc:247 +#: ../commands.cc:245 #, c-format msgid "executing command '%s'\n" msgstr "exécution de la commande « %s »\n" -#: ../commands.cc:253 +#: ../commands.cc:251 #, c-format msgid "unknown command '%s'\n" msgstr "commande inconnue « %s »\n" -#: ../commands.cc:300 +#: ../commands.cc:298 #, c-format msgid "pid file '%s' already exists" msgstr "le fichier pid « %s » existe déjà" -#: ../commands.cc:370 -msgid "Enter Log. Lines beginning with `MT:' are removed automatically\n" +#: ../commands.cc:368 +msgid "" +"Enter a description of this change.\n" +"Lines beginning with `MT:' are removed automatically.\n" msgstr "" -"Saisissez le journal. Les lignes débutant par « MT: » sont supprimées " -"automatiquement\n" +"Saisissez une description pour cette modification.\n" +"Les lignes débutant par « MT: » sont supprimées automatiquement.\n" -#: ../commands.cc:376 +#: ../commands.cc:375 +#, c-format msgid "edit of log message failed" msgstr "l'édition du message du journal a échouée" -#: ../commands.cc:385 +#: ../commands.cc:384 msgid "note: " msgstr "" -#: ../commands.cc:386 +#: ../commands.cc:385 #, c-format msgid "" "branch '%s' has multiple heads\n" @@ -517,115 +493,137 @@ "la branche « %s » a plusieurs heads\n" "vous devriez peut-être lancer « monotone merge »" -#: ../commands.cc:446 ../commands.cc:3511 +#: ../commands.cc:445 ../commands.cc:666 ../commands.cc:1304 +#: ../commands.cc:1374 ../commands.cc:1742 ../commands.cc:2605 +#: ../commands.cc:2620 ../commands.cc:2623 ../commands.cc:2821 +#: ../commands.cc:3462 #, c-format msgid "no such revision '%s'" -msgstr "" +msgstr "aucune révision « %s »" -#: ../commands.cc:453 +#: ../commands.cc:452 #, c-format msgid "expanding selection '%s'\n" msgstr "" -#: ../commands.cc:461 +#: ../commands.cc:460 #, c-format msgid "no match for selection '%s'" msgstr "" -#: ../commands.cc:464 +#: ../commands.cc:463 #, c-format msgid "selection '%s' has multiple ambiguous expansions: \n" msgstr "" -#: ../commands.cc:471 +#: ../commands.cc:470 #, c-format msgid "expanded to '%s'\n" msgstr "" -#: ../commands.cc:480 ../commands.cc:510 +#: ../commands.cc:481 +#, c-format msgid "non-hex digits in id" msgstr "" -#: ../commands.cc:489 ../commands.cc:519 +#: ../commands.cc:490 +#, fuzzy, c-format +msgid "partial id '%s' does not have an expansion" +msgstr "le fichier rc « %s » n'existe pas" + +#: ../commands.cc:493 +#, fuzzy, c-format +msgid "partial id '%s' has multiple ambiguous expansions:\n" +msgstr "le fichier rc « %s » n'existe pas" + +#: ../commands.cc:500 #, c-format -msgid "partial id '%s' does not have a unique expansion" +msgid "expanded partial id '%s' to '%s'\n" msgstr "" -#: ../commands.cc:492 ../commands.cc:522 +#: ../commands.cc:527 ../keys.cc:510 ../netsync.cc:2194 #, c-format -msgid "partial id '%s' has multiple ambiguous expansions: \n" -msgstr "" +msgid "no public key '%s' found in database" +msgstr "aucune clef publique « %s » dans la base de données" -#: ../commands.cc:499 ../commands.cc:529 +#: ../commands.cc:537 #, c-format msgid "" -"expanding partial id '%s'\n" -"expanded to '%s'\n" +"Key : %s\n" +"Sig : %s\n" +"Name : %s\n" +"Value : %s\n" msgstr "" +"Clé : %s\n" +"Signature : %s\n" +"Nom : %s\n" +"Valeur : %s\n" -#: ../commands.cc:557 -#, c-format -msgid "warning: no public key '%s' found in database\n" -msgstr "" +#: ../commands.cc:571 +msgid "ok" +msgstr "0K" -#: ../commands.cc:666 -msgid "no keys found\n" -msgstr "" +#: ../commands.cc:574 +msgid "bad" +msgstr "mauvais" -#: ../commands.cc:668 +#: ../commands.cc:577 +msgid "unknown" +msgstr "inconnu" + +#: ../commands.cc:652 #, c-format -msgid "no keys found matching '%s'\n" -msgstr "" +msgid "no keys found\n" +msgstr "aucune clef trouvée\n" -#: ../commands.cc:680 ../commands.cc:1389 ../commands.cc:1443 -#: ../commands.cc:2870 +#: ../commands.cc:654 #, c-format -msgid "no revision %s found in database" -msgstr "" +msgid "no keys found matching '%s'\n" +msgstr "aucune clef correspondant à « %s »\n" -#: ../commands.cc:686 +#: ../commands.cc:672 #, c-format msgid "revision %s already has children. We cannot kill it." -msgstr "" +msgstr "la révision %s a déjà des descendants. Impossible de la tuer." -#: ../commands.cc:816 ../commands.cc:838 ../commands.cc:870 ../commands.cc:894 -#: ../commands.cc:934 +#: ../commands.cc:802 ../commands.cc:824 ../commands.cc:856 ../commands.cc:880 +#: ../commands.cc:920 msgid "key and cert" msgstr "clef et certificat" -#: ../commands.cc:816 ../commands.cc:838 ../commands.cc:870 +#: ../commands.cc:802 ../commands.cc:824 ../commands.cc:856 msgid "KEYID" msgstr "IDCLEF" -#: ../commands.cc:816 +#: ../commands.cc:802 msgid "generate an RSA key-pair" msgstr "générer une paire de clefs RSA" -#: ../commands.cc:826 +#: ../commands.cc:812 #, c-format msgid "key '%s' already exists in database" msgstr "la clef « %s » est déjà dans la base de données" -#: ../commands.cc:830 +#: ../commands.cc:816 #, c-format msgid "generating key-pair '%s'\n" msgstr "" -#: ../commands.cc:832 +#: ../commands.cc:818 #, c-format msgid "storing key-pair '%s' in database\n" msgstr "" -#: ../commands.cc:838 +#: ../commands.cc:824 msgid "drop a public and private key" msgstr "supprimer une clef publique et privée" -#: ../commands.cc:849 +#: ../commands.cc:835 #, c-format msgid "dropping public key '%s' from database\n" msgstr "" -#: ../commands.cc:856 +#: ../commands.cc:842 #, c-format msgid "" "dropping private key '%s' from database\n" @@ -634,54 +632,57 @@ "suppression de la clef privée « %s » de la base de données\n" "\n" -#: ../commands.cc:857 +#: ../commands.cc:843 +#, c-format msgid "" "the private key data may not have been erased from the\n" "database. it is recommended that you use 'db dump' and\n" "'db load' to be sure." msgstr "" -#: ../commands.cc:865 +#: ../commands.cc:851 #, c-format msgid "public or private key '%s' does not exist in database" -msgstr "" +msgstr "la clef publique ou privée « %s » n'existe pas dans la base de données" -#: ../commands.cc:871 +#: ../commands.cc:857 msgid "change passphrase of a private RSA key" -msgstr "" +msgstr "changer la phrase de passe pour une clef RSA privée" -#: ../commands.cc:882 +#: ../commands.cc:868 #, c-format msgid "key '%s' does not exist in database" -msgstr "" +msgstr "la clef « %s » n'existe pas dans la base de données" -#: ../commands.cc:889 +#: ../commands.cc:875 +#, c-format msgid "passphrase changed\n" msgstr "la phrase de passe à changée\n" -#: ../commands.cc:894 +#: ../commands.cc:880 msgid "REVISION CERTNAME [CERTVAL]" msgstr "" -#: ../commands.cc:895 +#: ../commands.cc:881 msgid "create a cert for a revision" -msgstr "" +msgstr "créer un certificat pour une révision" -#: ../commands.cc:915 +#: ../commands.cc:901 +#, c-format msgid "no unique private key found, and no key specified" msgstr "" -#: ../commands.cc:934 +#: ../commands.cc:920 msgid "REVISION NAME VALUE SIGNER1 [SIGNER2 [...]]" msgstr "" -#: ../commands.cc:935 +#: ../commands.cc:921 msgid "" "test whether a hypothetical cert would be trusted\n" "by current settings" msgstr "" -#: ../commands.cc:968 +#: ../commands.cc:954 #, c-format msgid "" "if a cert on: %s\n" @@ -691,79 +692,78 @@ "it would be: %s\n" msgstr "" -#: ../commands.cc:977 +#: ../commands.cc:963 msgid "trusted" msgstr "" -#: ../commands.cc:977 +#: ../commands.cc:963 msgid "UNtrusted" msgstr "" -#: ../commands.cc:980 ../commands.cc:993 ../commands.cc:1005 -#: ../commands.cc:1022 ../commands.cc:1068 +#: ../commands.cc:966 ../commands.cc:979 ../commands.cc:991 +#: ../commands.cc:1008 ../commands.cc:1054 msgid "review" msgstr "" -#: ../commands.cc:980 +#: ../commands.cc:966 msgid "REVISION TAGNAME" msgstr "" -#: ../commands.cc:981 +#: ../commands.cc:967 #, fuzzy msgid "put a symbolic tag cert on a revision version" msgstr "mettre une certificat-étiquette symbolique" -#: ../commands.cc:993 +#: ../commands.cc:979 msgid "ID (pass|fail|true|false|yes|no|1|0)" msgstr "" -#: ../commands.cc:994 +#: ../commands.cc:980 msgid "note the results of running a test on a revision" msgstr "" -#: ../commands.cc:1005 ../commands.cc:1022 +#: ../commands.cc:991 ../commands.cc:1008 msgid "REVISION" msgstr "" -#: ../commands.cc:1006 +#: ../commands.cc:992 msgid "approve of a particular revision" -msgstr "" +msgstr "approuver une révision particulière" -#: ../commands.cc:1017 +#: ../commands.cc:1003 +#, c-format msgid "need --branch argument for approval" msgstr "" -#: ../commands.cc:1023 +#: ../commands.cc:1009 msgid "disapprove of a particular revision" msgstr "" -#: ../commands.cc:1036 -#, c-format -msgid "revision %s has %d changesets, cannot invert\n" -msgstr "" +#: ../commands.cc:1022 +#, fuzzy, c-format +msgid "revision '%s' has %d changesets, cannot invert\n" +msgstr "la révision %s n'existe pas" -#: ../commands.cc:1040 +#: ../commands.cc:1026 +#, c-format msgid "need --branch argument for disapproval" msgstr "" -#: ../commands.cc:1063 -#, c-format -msgid "disapproval of revision %s" -msgstr "" - -#: ../commands.cc:1068 +#: ../commands.cc:1054 msgid "REVISION [COMMENT]" msgstr "" -#: ../commands.cc:1069 +#: ../commands.cc:1055 msgid "comment on a particular revision" msgstr "" -#: ../commands.cc:1079 +#: ../commands.cc:1065 +#, c-format msgid "edit comment failed" -msgstr "" +msgstr "l'édition du commentaire a échouée" -#: ../commands.cc:1082 +#: ../commands.cc:1068 +#, c-format msgid "empty comment" msgstr "commentaire vide" @@ -774,141 +774,123 @@ #. write_change_set(cs, dat); #. cout << "change set '" << name << "'\n" << dat << endl; #. } -#: ../commands.cc:1092 ../commands.cc:1117 ../commands.cc:1144 -#: ../commands.cc:1275 ../commands.cc:2139 ../commands.cc:2266 -#: ../commands.cc:2819 ../commands.cc:3352 +#: ../commands.cc:1078 ../commands.cc:1103 ../commands.cc:1130 +#: ../commands.cc:1262 ../commands.cc:2092 ../commands.cc:2215 +#: ../commands.cc:2770 ../commands.cc:3303 msgid "working copy" msgstr "copie de travail" -#: ../commands.cc:1092 ../commands.cc:1117 +#: ../commands.cc:1078 ../commands.cc:1103 msgid "PATH..." msgstr "CHEMIN..." -#: ../commands.cc:1093 +#: ../commands.cc:1079 msgid "add files to working copy" msgstr "ajouter des fichiers à la copie de travail" -#: ../commands.cc:1118 +#: ../commands.cc:1104 msgid "drop files from working copy" msgstr "supprimer des fichiers de la copie de travail" -#: ../commands.cc:1144 +#: ../commands.cc:1130 msgid "SRC DST" -msgstr "" +msgstr "SRC DST" -#: ../commands.cc:1145 +#: ../commands.cc:1131 msgid "rename entries in the working copy" msgstr "renommer des entrées dans la copie de travail" #. fload and fmerge are simple commands for debugging the line #. merger. -#: ../commands.cc:1172 ../commands.cc:1185 ../commands.cc:2740 -#: ../commands.cc:2757 ../commands.cc:3412 +#: ../commands.cc:1159 ../commands.cc:1172 ../commands.cc:2691 +#: ../commands.cc:2708 ../commands.cc:3363 msgid "debug" msgstr "" -#: ../commands.cc:1172 +#: ../commands.cc:1159 msgid "load file contents into db" -msgstr "" +msgstr "charger le contenu du fichier dans la base de données" -#: ../commands.cc:1185 +#: ../commands.cc:1172 msgid " " msgstr " " -#: ../commands.cc:1186 +#: ../commands.cc:1173 msgid "merge 3 files and output result" msgstr "" -#: ../commands.cc:1196 +#: ../commands.cc:1183 +#, c-format msgid "ancestor file id does not exist" msgstr "" -#: ../commands.cc:1199 +#: ../commands.cc:1186 +#, c-format msgid "left file id does not exist" msgstr "" -#: ../commands.cc:1202 +#: ../commands.cc:1189 +#, c-format msgid "right file id does not exist" msgstr "" -#: ../commands.cc:1213 +#: ../commands.cc:1200 +#, c-format msgid "merge failed" msgstr "" -#: ../commands.cc:1218 ../commands.cc:1298 ../commands.cc:1696 -#: ../commands.cc:2607 ../commands.cc:3295 ../commands.cc:3491 -#: ../commands.cc:3529 +#: ../commands.cc:1205 ../commands.cc:1285 ../commands.cc:1631 +#: ../commands.cc:2558 ../commands.cc:3246 ../commands.cc:3443 +#: ../commands.cc:3480 msgid "informative" msgstr "information" -#: ../commands.cc:1218 ../commands.cc:2266 ../commands.cc:2607 -#: ../commands.cc:3352 +#: ../commands.cc:1205 ../commands.cc:2215 ../commands.cc:2558 +#: ../commands.cc:3303 msgid "[PATH]..." msgstr "" -#: ../commands.cc:1218 +#: ../commands.cc:1205 msgid "show status of working copy" -msgstr "" +msgstr "afficher l'état de la copie de travail" -#: ../commands.cc:1275 +#: ../commands.cc:1262 msgid "[PATH]" msgstr "" -#: ../commands.cc:1276 +#: ../commands.cc:1263 msgid "calculate identity of PATH or stdin" msgstr "" -#: ../commands.cc:1299 -msgid "" -"(file|manifest|revision) [ID]\n" -"file REVISION FILENAME" +#: ../commands.cc:1286 +msgid "FILENAME" msgstr "" -#: ../commands.cc:1301 -msgid "write file, manifest, or revision from database to stdout" +#: ../commands.cc:1287 +msgid "write file from database to stdout" msgstr "" -#: ../commands.cc:1321 +#: ../commands.cc:1318 #, c-format -msgid "no file version %s found in database" -msgstr "" - -#: ../commands.cc:1333 -#, c-format msgid "no file '%s' found in revision '%s'\n" msgstr "" -#: ../commands.cc:1338 -#, c-format -msgid "dumping file %s\n" -msgstr "" +#: ../commands.cc:1322 +#, fuzzy, c-format +msgid "dumping file '%s'\n" +msgstr "importation du fichier « %s »\n" -#: ../commands.cc:1362 -#, c-format -msgid "no manifest version %s found in database" -msgstr "" - -#: ../commands.cc:1366 -#, c-format -msgid "dumping manifest %s\n" -msgstr "" - -#: ../commands.cc:1393 -#, c-format -msgid "dumping revision %s\n" -msgstr "" - -#: ../commands.cc:1403 ../commands.cc:1502 ../commands.cc:3095 -#: ../commands.cc:3144 ../commands.cc:3229 ../commands.cc:3236 -#: ../commands.cc:3698 +#: ../commands.cc:1330 ../commands.cc:1437 ../commands.cc:3046 +#: ../commands.cc:3095 ../commands.cc:3180 ../commands.cc:3187 +#: ../commands.cc:3648 msgid "tree" msgstr "arborescence" -#: ../commands.cc:1403 +#: ../commands.cc:1330 msgid "[DIRECTORY]\n" msgstr "" -#: ../commands.cc:1404 +#: ../commands.cc:1331 msgid "" "check out a revision from database into directory.\n" "If a revision is given, that's the one that will be checked out.\n" @@ -918,80 +900,87 @@ #. no checkout dir specified, use branch name for dir #. use branch head revision -#: ../commands.cc:1419 ../commands.cc:1431 +#: ../commands.cc:1348 ../commands.cc:1362 +#, c-format msgid "need --branch argument for branch-based checkout" msgstr "" -#: ../commands.cc:1434 +#: ../commands.cc:1365 #, c-format msgid "branch %s is empty" msgstr "la branche %s est vide" -#: ../commands.cc:1435 +#: ../commands.cc:1366 #, c-format msgid "branch %s has multiple heads" msgstr "" -#: ../commands.cc:1456 +#: ../commands.cc:1387 #, c-format msgid "found %d %s branch certs on revision %s\n" msgstr "" -#: ../commands.cc:1461 +#: ../commands.cc:1392 #, c-format msgid "revision %s is not a member of branch %s\n" -msgstr "" +msgstr "la révision %s n'est pas membre de la branche %s\n" -#: ../commands.cc:1477 +#: ../commands.cc:1398 +#, fuzzy, c-format +msgid "checkout directory '%s' already exists" +msgstr "le fichier pid « %s » existe déjà" + +#: ../commands.cc:1412 #, c-format msgid "no manifest %s found in database" msgstr "" -#: ../commands.cc:1479 +#: ../commands.cc:1414 #, c-format msgid "checking out revision %s to directory %s\n" msgstr "" -#: ../commands.cc:1485 +#: ../commands.cc:1420 #, c-format msgid "no file %s found in database for %s" msgstr "" -#: ../commands.cc:1489 ../commands.cc:3399 +#: ../commands.cc:1424 ../commands.cc:3350 #, c-format msgid "writing file %s to %s\n" msgstr "" -#: ../commands.cc:1502 +#: ../commands.cc:1437 msgid "show unmerged head revisions of branch" msgstr "" -#: ../commands.cc:1510 ../commands.cc:3104 +#: ../commands.cc:1445 ../commands.cc:3055 +#, c-format msgid "please specify a branch, with --branch=BRANCH" -msgstr "" +msgstr "veuillez préciser une branche avec --branch=BRANCHE" -#: ../commands.cc:1515 ../commands.cc:3108 ../commands.cc:3178 -#: ../commands.cc:3181 +#: ../commands.cc:1450 ../commands.cc:3059 ../commands.cc:3129 +#: ../commands.cc:3132 #, c-format msgid "branch '%s' is empty\n" msgstr "la branche « %s » est vide\n" -#: ../commands.cc:1517 +#: ../commands.cc:1452 #, c-format msgid "branch '%s' is currently merged:\n" msgstr "la branche « %s » est actuellement fusionnée :\n" -#: ../commands.cc:1519 +#: ../commands.cc:1454 #, c-format msgid "branch '%s' is currently unmerged:\n" msgstr "la branche « %s » n'est actuellement pas fusionnée :\n" -#: ../commands.cc:1558 +#: ../commands.cc:1493 #, c-format msgid "no epoch for branch %s\n" msgstr "" -#: ../commands.cc:1697 +#: ../commands.cc:1632 msgid "" "certs ID\n" "keys [PATTERN]\n" @@ -1005,200 +994,212 @@ "missing" msgstr "" -#: ../commands.cc:1707 +#: ../commands.cc:1642 msgid "" "show database objects, or the current working copy manifest,\n" "or unknown, intentionally ignored, or missing state files" msgstr "" -#: ../commands.cc:1744 ../commands.cc:1770 ../commands.cc:1794 -#: ../commands.cc:1812 ../commands.cc:1831 ../commands.cc:1850 -#: ../commands.cc:1868 ../commands.cc:1884 ../commands.cc:1904 +#: ../commands.cc:1679 ../commands.cc:1705 ../commands.cc:1729 +#: ../commands.cc:1747 ../commands.cc:1766 ../commands.cc:1785 +#: ../commands.cc:1803 ../commands.cc:1819 ../commands.cc:1839 msgid "packet i/o" msgstr "" -#: ../commands.cc:1744 ../commands.cc:1770 +#: ../commands.cc:1679 ../commands.cc:1705 msgid "OLDID NEWID" msgstr "" -#: ../commands.cc:1745 +#: ../commands.cc:1680 msgid "write manifest delta packet to stdout" msgstr "" -#: ../commands.cc:1759 ../commands.cc:1761 ../commands.cc:1825 +#: ../commands.cc:1694 ../commands.cc:1696 ../commands.cc:1760 #, c-format -msgid "no such manifest %s" -msgstr "" +msgid "no such manifest '%s'" +msgstr "aucun manifeste « %s »" -#: ../commands.cc:1771 +#: ../commands.cc:1706 msgid "write file delta packet to stdout" msgstr "" -#: ../commands.cc:1785 ../commands.cc:1787 ../commands.cc:1844 -#: ../commands.cc:2160 +#: ../commands.cc:1720 ../commands.cc:1722 ../commands.cc:1779 +#: ../commands.cc:2113 #, c-format -msgid "no such file %s" -msgstr "" +msgid "no such file '%s'" +msgstr "aucun fichier « %s »" -#: ../commands.cc:1794 ../commands.cc:1812 ../commands.cc:1831 -#: ../commands.cc:1850 ../commands.cc:1868 ../commands.cc:1884 +#: ../commands.cc:1729 ../commands.cc:1747 ../commands.cc:1766 +#: ../commands.cc:1785 ../commands.cc:1803 ../commands.cc:1819 msgid "ID" msgstr "" -#: ../commands.cc:1794 +#: ../commands.cc:1729 msgid "write revision data packet to stdout" msgstr "" -#: ../commands.cc:1807 -#, c-format -msgid "no such revision %s" -msgstr "" - -#: ../commands.cc:1812 +#: ../commands.cc:1747 msgid "write manifest data packet to stdout" msgstr "" -#: ../commands.cc:1831 +#: ../commands.cc:1766 msgid "write file data packet to stdout" msgstr "" -#: ../commands.cc:1850 +#: ../commands.cc:1785 msgid "write cert packets to stdout" msgstr "" -#: ../commands.cc:1868 +#: ../commands.cc:1803 msgid "write public key packet to stdout" msgstr "" -#: ../commands.cc:1876 +#: ../commands.cc:1811 #, c-format msgid "public key '%s' does not exist in database" msgstr "" -#: ../commands.cc:1884 +#: ../commands.cc:1819 msgid "write private key packet to stdout" msgstr "" -#: ../commands.cc:1892 +#: ../commands.cc:1827 #, c-format msgid "public and private key '%s' do not exist in database" msgstr "" -#: ../commands.cc:1904 -msgid "read packets from stdin" -msgstr "lecture des paquets depuis l'entrée standard" +#: ../commands.cc:1840 +msgid "read packets from files or stdin" +msgstr "lecture des paquets depuis des fichiers ou l'entrée standard" -#: ../commands.cc:1909 +#: ../commands.cc:1848 +#, c-format msgid "no packets found on stdin" msgstr "aucun paquet trouvé sur l'entrée standard" -#: ../commands.cc:1910 +#: ../commands.cc:1859 #, c-format +msgid "no packets found in given file" +msgid_plural "no packets found in given files" +msgstr[0] "aucun paquet trouvé dans le fichier spécifié" +msgstr[1] "aucun paquet trouvé dans les fichiers spécifiés" + +#: ../commands.cc:1863 +#, c-format msgid "read %d packet" msgid_plural "read %d packets" msgstr[0] "lu %d paquet" msgstr[1] "lu %d paquets" -#: ../commands.cc:1914 ../commands.cc:2003 ../commands.cc:2018 -#: ../commands.cc:2032 ../commands.cc:2047 +#: ../commands.cc:1867 ../commands.cc:1956 ../commands.cc:1971 +#: ../commands.cc:1985 ../commands.cc:2000 msgid "network" msgstr "réseau" -#: ../commands.cc:1915 +#: ../commands.cc:1868 msgid "rebuild the indices used to sync over the network" msgstr "" +"reconstruction des index utilisés pour la synchronisation par le réseau" -#: ../commands.cc:1949 +#: ../commands.cc:1902 #, c-format msgid "setting default server to %s\n" msgstr "" -#: ../commands.cc:1955 +#: ../commands.cc:1908 +#, c-format msgid "no hostname given" msgstr "" -#: ../commands.cc:1957 +#: ../commands.cc:1910 +#, c-format msgid "no server given and no default server set" msgstr "" -#: ../commands.cc:1961 +#: ../commands.cc:1914 #, c-format msgid "using default server address: %s\n" -msgstr "" +msgstr "utilisation de l'adresse par défaut du serveur : %s\n" -#: ../commands.cc:1973 +#: ../commands.cc:1926 #, c-format msgid "setting default branch include pattern to '%s'\n" msgstr "" -#: ../commands.cc:1979 +#: ../commands.cc:1932 #, c-format msgid "setting default branch exclude pattern to '%s'\n" msgstr "" -#: ../commands.cc:1985 +#: ../commands.cc:1938 +#, c-format msgid "no branch pattern given" msgstr "" -#: ../commands.cc:1987 +#: ../commands.cc:1940 +#, c-format msgid "no branch pattern given and no default pattern set" msgstr "" -#: ../commands.cc:1991 +#: ../commands.cc:1944 #, c-format msgid "using default branch include pattern: '%s'\n" msgstr "" -#: ../commands.cc:1999 +#: ../commands.cc:1952 #, c-format msgid "excluding: %s\n" msgstr "" -#: ../commands.cc:2003 ../commands.cc:2018 ../commands.cc:2032 +#: ../commands.cc:1956 ../commands.cc:1971 ../commands.cc:1985 msgid "[ADDRESS[:PORTNUMBER] [PATTERN]]" -msgstr "" +msgstr "[ADRESSE[:PORT] [MOTIF]]" -#: ../commands.cc:2004 +#: ../commands.cc:1957 msgid "push branches matching PATTERN to netsync server at ADDRESS" msgstr "" +"envoie les branches correspondant au MOTIF au serveur netsync à l'ADRESSE" -#: ../commands.cc:2011 ../commands.cc:2040 ../commands.cc:2057 +#: ../commands.cc:1964 ../commands.cc:1993 ../commands.cc:2010 +#, c-format msgid "could not guess default signing key" msgstr "" -#: ../commands.cc:2019 +#: ../commands.cc:1972 msgid "pull branches matching PATTERN from netsync server at ADDRESS" msgstr "" -#: ../commands.cc:2026 +#: ../commands.cc:1979 +#, c-format msgid "doing anonymous pull; use -kKEYNAME if you need authentication\n" msgstr "" "récupération anonyme; utilisez -kNOMCLEF si vous avez besoin d'une " "authentification\n" -#: ../commands.cc:2033 +#: ../commands.cc:1986 msgid "sync branches matching PATTERN with netsync server at ADDRESS" msgstr "" -#: ../commands.cc:2047 +#: ../commands.cc:2000 msgid "ADDRESS[:PORTNUMBER] PATTERN ..." msgstr "ADRESSE[:PORT] MOTIF ..." -#: ../commands.cc:2048 +#: ../commands.cc:2001 msgid "" "listen on ADDRESS and serve the specified branches to connecting clients" msgstr "" -#: ../commands.cc:2061 +#: ../commands.cc:2014 +#, c-format msgid "" "need permission to store persistent passphrase (see hook persist_phrase_ok())" msgstr "" -#: ../commands.cc:2071 +#: ../commands.cc:2024 msgid "database" msgstr "base de données" -#: ../commands.cc:2072 +#: ../commands.cc:2025 msgid "" "init\n" "info\n" @@ -1216,140 +1217,139 @@ "set_epoch BRANCH EPOCH\n" msgstr "" -#: ../commands.cc:2086 +#: ../commands.cc:2039 msgid "manipulate database state" msgstr "manipule l'état de la base de données" -#: ../commands.cc:2139 +#: ../commands.cc:2092 msgid "" "set FILE ATTR VALUE\n" "get FILE [ATTR]\n" "drop FILE" msgstr "" -#: ../commands.cc:2140 +#: ../commands.cc:2093 msgid "set, get or drop file attributes" msgstr "" -#: ../commands.cc:2228 ../work.cc:118 +#: ../commands.cc:2181 ../work.cc:113 #, c-format msgid "registering %s file in working copy\n" msgstr "" -#: ../commands.cc:2257 +#: ../commands.cc:2210 #, c-format msgid "failed to parse date string '%s': %s" msgstr "" -#: ../commands.cc:2261 -#, c-format -msgid "failed to parse date string '%s'" -msgstr "" - -#: ../commands.cc:2267 +#: ../commands.cc:2216 msgid "commit working copy to database" msgstr "" -#: ../commands.cc:2285 -#, fuzzy +#: ../commands.cc:2234 +#, c-format msgid "no changes to commit\n" -msgstr "aucun changement à commiter\n" +msgstr "aucun changement à valider\n" -#: ../commands.cc:2296 +#: ../commands.cc:2245 #, c-format msgid "beginning commit on branch '%s'\n" msgstr "" -#: ../commands.cc:2297 +#: ../commands.cc:2246 #, c-format -msgid "new manifest %s\n" -msgstr "nouveau manifeste %s\n" +msgid "" +"new manifest '%s'\n" +"new revision '%s'\n" +msgstr "" +"nouveau manifeste « %s »\n" +"nouvelle révision « %s »\n" -#: ../commands.cc:2298 +#: ../commands.cc:2253 #, c-format -msgid "new revision %s\n" -msgstr "nouvelle révisions %s\n" - -#: ../commands.cc:2302 msgid "--message and --message-file are mutually exclusive" msgstr "--message et --message-file sont mutuellement exclusifs" -#: ../commands.cc:2305 +#: ../commands.cc:2256 +#, fuzzy, c-format msgid "" "MT/log is non-empty and --message supplied\n" "perhaps move or delete MT/log,\n" "or remove --message from the command line?" -msgstr "" +msgstr "MT/log n'est pas vide et --message-file a été passé\n" -#: ../commands.cc:2310 +#: ../commands.cc:2261 +#, c-format msgid "" "MT/log is non-empty and --message-file supplied\n" "perhaps move or delete MT/log,\n" "or remove --message-file from the command line?" msgstr "" -#: ../commands.cc:2328 -msgid "empty log message" +#: ../commands.cc:2279 +#, fuzzy, c-format +msgid "empty log message; commit canceled" msgstr "message du journal vide" -#: ../commands.cc:2340 +#: ../commands.cc:2291 #, c-format msgid "revision %s already in database\n" msgstr "la révision %s est déjà dans la base de données\n" #. new revision -#: ../commands.cc:2345 +#: ../commands.cc:2296 #, c-format msgid "inserting new revision %s\n" -msgstr "" +msgstr "insertion de la nouvelle révision %s\n" -#: ../commands.cc:2354 +#: ../commands.cc:2305 #, c-format msgid "skipping manifest %s, already in database\n" msgstr "" -#: ../commands.cc:2358 +#: ../commands.cc:2309 #, c-format msgid "inserting manifest delta %s -> %s\n" msgstr "" -#: ../commands.cc:2369 +#: ../commands.cc:2320 #, c-format msgid "inserting full manifest %s\n" msgstr "" -#: ../commands.cc:2382 +#: ../commands.cc:2333 #, c-format msgid "skipping file delta %s, already in database\n" msgstr "" -#: ../commands.cc:2388 +#: ../commands.cc:2339 #, c-format msgid "inserting delta %s -> %s\n" msgstr "" -#: ../commands.cc:2398 ../commands.cc:2415 +#: ../commands.cc:2349 ../commands.cc:2366 #, c-format msgid "file '%s' modified during commit, aborting" msgstr "le fichier « %s » a été modifié pendant le commit, interruption" -#: ../commands.cc:2408 +#: ../commands.cc:2359 #, c-format msgid "inserting full version %s\n" msgstr "" -#: ../commands.cc:2442 +#: ../commands.cc:2393 #, c-format msgid "committed revision %s\n" msgstr "" -#: ../commands.cc:2448 +#: ../commands.cc:2399 +#, c-format msgid "" "note: this revision creates divergence\n" "note: you may (or may not) wish to run 'monotone merge'" msgstr "" -#: ../commands.cc:2608 +#: ../commands.cc:2559 msgid "" "show current diffs on stdout.\n" "If one revision is given, the diff between the working directory and\n" @@ -1357,103 +1357,104 @@ "them is given. If no format is specified, unified is used by default." msgstr "" -#: ../commands.cc:2624 +#: ../commands.cc:2575 +#, c-format msgid "" "--diff-args requires --external\n" "try adding --external or removing --diff-args?" msgstr "" +"--diff-args requiet --external\n" +"essayez d'ajouter --external ou de retirer --diff-args ?" -#: ../commands.cc:2654 ../commands.cc:2669 ../commands.cc:2672 +#: ../commands.cc:2609 #, c-format -msgid "revision %s does not exist" -msgstr "la révision %s n'existe pas" - -#: ../commands.cc:2658 msgid "current revision has no ancestor" msgstr "la révision actuelle n'existe pas" -#: ../commands.cc:2697 +#: ../commands.cc:2648 #, c-format msgid "no common ancestor for %s and %s" msgstr "pas d'ancêtre commun pour %s et %s" -#: ../commands.cc:2703 +#: ../commands.cc:2654 +#, c-format msgid "concatenating un-committed changeset to composite\n" msgstr "" -#: ../commands.cc:2730 -msgid "# no changes" -msgstr "" - -#: ../commands.cc:2740 ../commands.cc:2757 +#: ../commands.cc:2691 ../commands.cc:2708 msgid "LEFT RIGHT" msgstr "GAUCHE DROITE" -#: ../commands.cc:2740 +#: ../commands.cc:2691 #, fuzzy msgid "print least common ancestor" msgstr "l'ancêtre commun est %s\n" -#: ../commands.cc:2753 -#, fuzzy +#: ../commands.cc:2704 msgid "no common ancestor found" -msgstr "l'ancêtre commun est %s\n" +msgstr "aucun ancêtre commun n'a été trouvé" -#: ../commands.cc:2757 +#: ../commands.cc:2708 msgid "print least common ancestor / dominator" msgstr "" -#: ../commands.cc:2771 +#: ../commands.cc:2722 #, fuzzy msgid "no common ancestor/dominator found" msgstr "l'ancêtre commun est %s\n" -#: ../commands.cc:2796 +#: ../commands.cc:2747 #, c-format msgid "updating %s to %s\n" -msgstr "" +msgstr "mise à jour de %s en %s\n" -#: ../commands.cc:2820 +#: ../commands.cc:2771 msgid "" "update working copy.\n" "If a revision is given, base the update on that revision. If not,\n" "base the update on the head of the branch (given or implicit)." msgstr "" -#: ../commands.cc:2845 +#: ../commands.cc:2796 +#, c-format msgid "this working directory is a new project; cannot update" msgstr "" +"ce dossier de travail est un nouveau projet, impossible de mettre à jour" -#: ../commands.cc:2852 +#: ../commands.cc:2803 +#, c-format msgid "" "your request matches no descendents of the current revision\n" "in fact, it doesn't even match the current revision\n" "maybe you want --revision=" msgstr "" -#: ../commands.cc:2857 +#: ../commands.cc:2808 +#, c-format msgid "multiple update candidates:\n" -msgstr "plusieurs candidats pour la mise-à-jour :\n" +msgstr "plusieurs candidats pour la mise à jour :\n" -#: ../commands.cc:2861 +#: ../commands.cc:2812 +#, c-format msgid "choose one with 'monotone update -r'\n" msgstr "choisissez en un avec « monotone update -r »\n" -#: ../commands.cc:2862 +#: ../commands.cc:2813 +#, c-format msgid "multiple candidates remain after selection" msgstr "" -#: ../commands.cc:2877 +#: ../commands.cc:2828 #, c-format msgid "already up to date at %s\n" msgstr "déjà à jour en %s\n" -#: ../commands.cc:2881 +#: ../commands.cc:2832 #, c-format msgid "selected update target %s\n" -msgstr "" +msgstr "sélection de la cible %s pour la mise à jour\n" -#: ../commands.cc:2893 +#: ../commands.cc:2844 #, c-format msgid "" "revision %s is not a member of branch %s\n" @@ -1461,270 +1462,253 @@ msgstr "" #. working copy has no changes -#: ../commands.cc:2908 +#: ../commands.cc:2859 #, c-format msgid "updating along chosen edge %s -> %s\n" msgstr "" -#: ../commands.cc:2919 +#: ../commands.cc:2870 #, c-format msgid "merging working copy with chosen edge %s -> %s\n" msgstr "" -#: ../commands.cc:2968 +#: ../commands.cc:2919 #, c-format msgid "updated to base revision %s\n" msgstr "mise à jour vers la révision de base %s\n" -#: ../commands.cc:3034 -#, c-format -msgid "common ancestor %s found\n" -msgstr "" +#: ../commands.cc:2985 +#, fuzzy, c-format +msgid "" +"common ancestor %s found\n" +"trying 3-way merge\n" +msgstr "aucun ancêtre commun n'a été trouvé" -#: ../commands.cc:3035 -msgid "trying 3-way merge\n" -msgstr "" - -#: ../commands.cc:3045 +#: ../commands.cc:2996 +#, c-format msgid "no common ancestor found, synthesizing edges\n" msgstr "" -#: ../commands.cc:3095 +#: ../commands.cc:3046 +#, fuzzy msgid "merge unmerged heads of branch" -msgstr "" +msgstr "fusionne les" -#: ../commands.cc:3109 +#: ../commands.cc:3060 #, c-format msgid "branch '%s' is merged\n" msgstr "la branche « %s » est fusionnée\n" -#: ../commands.cc:3115 +#: ../commands.cc:3066 #, c-format msgid "starting with revision 1 / %d\n" msgstr "" -#: ../commands.cc:3119 +#: ../commands.cc:3070 #, c-format msgid "merging with revision %d / %d\n" msgstr "" #. Somewhat redundant, but consistent with output of plain "merge" command. -#: ../commands.cc:3120 ../commands.cc:3121 ../commands.cc:3188 -#: ../commands.cc:3272 ../commands.cc:3273 +#: ../commands.cc:3071 ../commands.cc:3072 ../commands.cc:3139 +#: ../commands.cc:3223 ../commands.cc:3224 #, c-format msgid "[source] %s\n" msgstr "" -#: ../commands.cc:3133 +#: ../commands.cc:3089 ../commands.cc:3176 ../commands.cc:3243 #, c-format -msgid "" -"merge of %s\n" -" and %s\n" -msgstr "" -"fusion de %s\n" -" et %s\n" - -#: ../commands.cc:3138 ../commands.cc:3225 ../commands.cc:3292 -#, c-format msgid "[merged] %s\n" msgstr "" -#: ../commands.cc:3141 +#: ../commands.cc:3092 +#, c-format msgid "note: your working copies have not been updated\n" msgstr "" -#: ../commands.cc:3144 +#: ../commands.cc:3095 msgid "SOURCE-BRANCH DEST-BRANCH" msgstr "" -#: ../commands.cc:3145 +#: ../commands.cc:3096 msgid "merge from one branch to another asymmetrically" msgstr "" -#: ../commands.cc:3179 ../commands.cc:3182 +#: ../commands.cc:3130 ../commands.cc:3133 #, c-format msgid "branch '%s' is not merged\n" msgstr "la branche « %s » n'est pas fusionnée\n" -#: ../commands.cc:3187 +#: ../commands.cc:3138 #, c-format msgid "propagating %s -> %s\n" msgstr "" -#: ../commands.cc:3189 +#: ../commands.cc:3140 #, c-format msgid "[target] %s\n" msgstr "" -#: ../commands.cc:3194 +#: ../commands.cc:3145 #, c-format msgid "branch '%s' is up-to-date with respect to branch '%s'\n" msgstr "" -#: ../commands.cc:3196 +#: ../commands.cc:3147 +#, c-format msgid "no action taken\n" msgstr "" -#: ../commands.cc:3200 +#: ../commands.cc:3151 #, c-format msgid "no merge necessary; putting %s in branch '%s'\n" msgstr "" -#: ../commands.cc:3217 -#, c-format -msgid "" -"propagate from branch '%s' (head %s)\n" -" to branch '%s' (head %s)\n" -msgstr "" - -#: ../commands.cc:3229 +#: ../commands.cc:3180 msgid "refresh the inodeprint cache" msgstr "" -#: ../commands.cc:3237 +#: ../commands.cc:3188 msgid "" "LEFT-REVISION RIGHT-REVISION DEST-BRANCH\n" "LEFT-REVISION RIGHT-REVISION COMMON-ANCESTOR DEST-BRANCH" msgstr "" -#: ../commands.cc:3239 +#: ../commands.cc:3190 msgid "merge two explicitly given revisions, placing result in given branch" msgstr "" -#: ../commands.cc:3254 ../commands.cc:3256 +#: ../commands.cc:3205 ../commands.cc:3207 #, c-format msgid "%s is not an ancestor of %s" msgstr "%s n'est pas un ancêtre de %s" -#: ../commands.cc:3265 +#: ../commands.cc:3216 #, c-format msgid "%s and %s are the same revision, aborting" msgstr "" -#: ../commands.cc:3267 ../commands.cc:3269 +#: ../commands.cc:3218 ../commands.cc:3220 #, c-format msgid "%s is already an ancestor of %s" msgstr "" -#: ../commands.cc:3283 -#, c-format -msgid "" -"explicit_merge of %s\n" -" and %s\n" -" using ancestor %s\n" -" to branch '%s'\n" -msgstr "" - -#: ../commands.cc:3295 +#: ../commands.cc:3246 msgid "(revision|manifest|file|key) PARTIAL-ID" msgstr "" -#: ../commands.cc:3296 +#: ../commands.cc:3247 msgid "complete partial id" msgstr "" -#: ../commands.cc:3305 +#: ../commands.cc:3256 +#, c-format msgid "non-hex digits in partial id" msgstr "" -#: ../commands.cc:3353 +#: ../commands.cc:3304 msgid "revert file(s), dir(s) or entire working copy" msgstr "" -#: ../commands.cc:3391 +#: ../commands.cc:3342 #, c-format msgid "reverting %s from %s to %s\n" msgstr "" -#: ../commands.cc:3395 +#: ../commands.cc:3346 #, c-format msgid "no file version %s found in database for %s" msgstr "" -#: ../commands.cc:3412 +#: ../commands.cc:3363 msgid "RCSFILE..." msgstr "" -#: ../commands.cc:3413 +#: ../commands.cc:3364 msgid "" "parse versions in RCS files\n" -"this command doesn't reconstruct or import revisions. you probably want " +"this command doesn't reconstruct or import revisions.you probably want " "cvs_import" msgstr "" -#: ../commands.cc:3428 +#: ../commands.cc:3380 msgid "rcs" msgstr "" -#: ../commands.cc:3428 +#: ../commands.cc:3380 msgid "CVSROOT" msgstr "" -#: ../commands.cc:3428 +#: ../commands.cc:3380 msgid "import all versions in CVS repository" msgstr "" -#: ../commands.cc:3491 +#: ../commands.cc:3443 msgid "PATH" msgstr "" -#: ../commands.cc:3492 +#: ../commands.cc:3444 msgid "print annotated copy of the file from REVISION" msgstr "" -#: ../commands.cc:3510 +#: ../commands.cc:3461 #, c-format msgid "no revision for file '%s' in database" msgstr "" -#: ../commands.cc:3513 +#: ../commands.cc:3464 #, c-format msgid "annotate file file_path '%s'\n" msgstr "" -#: ../commands.cc:3522 +#: ../commands.cc:3473 #, c-format -msgid "No such file '%s' in revision %s\n" -msgstr "" +msgid "no such file '%s' in revision '%s'\n" +msgstr "aucun fichier « %s » dans la révision « %s »\n" -#: ../commands.cc:3524 +#: ../commands.cc:3475 #, c-format msgid "annotate for file_id %s\n" msgstr "" -#: ../commands.cc:3529 +#: ../commands.cc:3480 msgid "[FILE]" msgstr "" -#: ../commands.cc:3530 +#: ../commands.cc:3481 msgid "" -"print history in reverse order (filtering by 'FILE'). If one or more\n" +"print history in reverse order (filtering by 'FILE'). If one or more\n" "revisions are given, use them as a starting point." msgstr "" -#: ../commands.cc:3590 +#: ../commands.cc:3541 #, c-format msgid "revision %s does not exist in db, skipping\n" msgstr "" -#: ../commands.cc:3623 +#: ../commands.cc:3574 #, c-format msgid "revision '%s' in '%s' maps to '%s' in %s\n" msgstr "" -#: ../commands.cc:3698 +#: ../commands.cc:3648 msgid "DIRECTORY" msgstr "" -#: ../commands.cc:3698 +#: ../commands.cc:3648 msgid "setup a new working copy directory" msgstr "" -#: ../commands.cc:3712 +#: ../commands.cc:3654 +#, c-format +msgid "need --branch argument for setup" +msgstr "" + +#: ../commands.cc:3663 msgid "automation" msgstr "automatisation" -#: ../commands.cc:3713 +#: ../commands.cc:3664 msgid "" "interface_version\n" "heads [BRANCH]\n" @@ -1742,54 +1726,62 @@ "stdio\n" "certs REV\n" "select SELECTOR\n" +"get_file ID\n" +"get_manifest [ID]\n" +"get_revision [ID]\n" msgstr "" -#: ../commands.cc:3729 +#: ../commands.cc:3683 msgid "automation interface" msgstr "" -#: ../commands.cc:3743 ../commands.cc:3759 +#: ../commands.cc:3697 ../commands.cc:3713 msgid "vars" msgstr "variables" -#: ../commands.cc:3743 +#: ../commands.cc:3697 msgid "DOMAIN NAME VALUE" msgstr "" -#: ../commands.cc:3744 +#: ../commands.cc:3698 msgid "set the database variable NAME to VALUE, in domain DOMAIN" msgstr "" -#: ../commands.cc:3759 +#: ../commands.cc:3713 msgid "DOMAIN NAME" msgstr "" -#: ../commands.cc:3760 +#: ../commands.cc:3714 msgid "remove the database variable NAME in domain DOMAIN" msgstr "" -#: ../commands.cc:3771 +#: ../commands.cc:3725 #, c-format msgid "no var with name %s in domain %s" msgstr "" -#: ../database.cc:82 +#: ../database.cc:80 #, c-format msgid "" "database schemas do not match: wanted %s, got %s. try migrating database" msgstr "" -#: ../database.cc:139 +#: ../database.cc:135 ../database.cc:197 #, c-format -msgid "database %s is a directory\n" -msgstr "" +msgid "database %s does not exist" +msgstr "la base de données %s n'existe pas" -#: ../database.cc:146 +#: ../database.cc:136 #, c-format +msgid "%s is a directory, not a database" +msgstr "%s est un dossier, pas une base de données" + +#: ../database.cc:143 +#, c-format msgid "unable to probe database version in file %s" msgstr "" -#: ../database.cc:153 +#: ../database.cc:150 #, c-format msgid "database %s is not an sqlite version 3 file, try dump and reload" msgstr "" @@ -1797,43 +1789,39 @@ #. first log the code so we can find _out_ what the confusing code #. was... note that code does not uniquely identify the errmsg, unlike #. errno's. -#: ../database.cc:176 ../database.cc:187 +#: ../database.cc:172 ../database.cc:183 #, c-format msgid "sqlite error: %d: %s" msgstr "erreur sqlite : %d : %s" -#: ../database.cc:181 +#: ../database.cc:177 msgid "make sure database and containing directory are writeable" msgstr "" -#: ../database.cc:201 +#: ../database.cc:198 #, c-format -msgid "database %s does not exist" -msgstr "la base de données %s n'existe pas" - -#: ../database.cc:203 -#, c-format msgid "database %s is a directory" msgstr "" -#: ../database.cc:230 +#: ../database.cc:224 #, c-format msgid "could not initialize database: %s: already exists" msgstr "" -#: ../database.cc:235 +#: ../database.cc:229 #, c-format msgid "" "existing (possibly stale) journal file '%s' has same stem as new database '%" -"s'" +"s'\n" +"cancelling database creation" msgstr "" -#: ../database.cc:353 +#: ../database.cc:348 #, c-format -msgid "cannot create %s; it already exists\n" -msgstr "" +msgid "cannot create %s; it already exists" +msgstr "impossible de créer %s car ceci existe déjà" -#: ../database.cc:416 +#: ../database.cc:412 #, c-format msgid "" "schema version : %s\n" @@ -1874,67 +1862,73 @@ " certificats : %u\n" " total : %u\n" -#: ../database.cc:464 +#: ../database.cc:465 #, c-format msgid "database schema version: %s" msgstr "version du schéma de la base de données : %s" -#: ../database.cc:544 +#: ../database.cc:545 +#, c-format msgid "statement cache statistics\n" msgstr "statistiques relatives au cache des expressions\n" -#: ../database.cc:545 +#: ../database.cc:546 #, c-format msgid "prepared %d statements\n" msgstr "%d expressions préparées\n" -#: ../database.cc:550 +#: ../database.cc:551 #, c-format msgid "%d executions of %s\n" msgstr "%d exécutions de %s\n" -#: ../database.cc:607 +#: ../database.cc:608 #, c-format msgid "prepared statement %s\n" msgstr "" -#: ../database.cc:611 +#: ../database.cc:612 #, c-format msgid "multiple statements in query: %s\n" msgstr "" -#: ../database.cc:617 +#: ../database.cc:618 #, c-format msgid "wanted %d columns got %d in query: %s\n" msgstr "" -#: ../database.cc:623 +#: ../database.cc:624 #, c-format msgid "binding %d parameters for %s\n" msgstr "" -#: ../database.cc:637 +#: ../database.cc:638 #, c-format msgid "binding %d with value '%s'\n" msgstr "" -#: ../database.cc:653 +#: ../database.cc:654 #, c-format msgid "null result in query: %s\n" msgstr "" -#: ../database.cc:671 +#: ../database.cc:672 #, c-format msgid "wanted %d rows got %s in query: %s\n" msgstr "" -#: ../database.cc:879 +#: ../database.cc:682 #, c-format +msgid "cannot change filename to %s while db is open" +msgstr "" + +#: ../database.cc:880 +#, c-format msgid "version cache expiring %s\n" msgstr "" #. ++cache_hits; -#: ../database.cc:901 +#: ../database.cc:902 #, c-format msgid "version cache hit on %s\n" msgstr "" @@ -1955,52 +1949,53 @@ #. node, so it much cheaper in terms of memory. #. #. we also maintain a cycle-detecting set, just to be safe -#: ../database.cc:946 +#: ../database.cc:947 #, c-format msgid "reconstructing %s in %s\n" msgstr "" -#: ../database.cc:1000 +#: ../database.cc:1001 #, c-format msgid "inserting edge: %s <- %s\n" msgstr "" -#: ../database.cc:1004 +#: ../database.cc:1005 #, c-format msgid "skipping merge edge %s <- %s\n" msgstr "" -#: ../database.cc:1050 +#: ../database.cc:1051 #, c-format msgid "following delta %s -> %s\n" msgstr "" #. perform the actual SQL transactions to kill rev rid here -#: ../database.cc:1414 +#: ../database.cc:1415 #, c-format msgid "Killing revision %s locally\n" msgstr "" -#: ../database.cc:1426 +#: ../database.cc:1427 #, c-format msgid "Deleting all references to branch %s\n" msgstr "" -#: ../database.cc:1439 +#: ../database.cc:1440 #, c-format msgid "Deleting all references to tag %s\n" msgstr "" -#: ../database.cc:1589 ../database.cc:1601 +#: ../database.cc:1590 ../database.cc:1602 #, c-format msgid "another key with name '%s' already exists" msgstr "" -#: ../database.cc:2450 +#: ../database.cc:2451 +#, c-format msgid "no database specified" msgstr "aucune base de données n'a été spécifiée" -#: ../database.cc:2461 +#: ../database.cc:2462 #, c-format msgid "could not open database '%s': %s" msgstr "impossible d'ouvrir la base de données « %s » : %s" @@ -2079,10 +2074,12 @@ msgstr "" #: ../diff_patch.cc:411 +#, c-format msgid "conflicting prefixes\n" msgstr "" #: ../diff_patch.cc:417 +#, c-format msgid "conflicting suffixes\n" msgstr "" @@ -2092,6 +2089,7 @@ msgstr "" #: ../diff_patch.cc:452 +#, c-format msgid "conflict detected. no merge.\n" msgstr "" @@ -2106,10 +2104,12 @@ msgstr "" #: ../diff_patch.cc:533 ../diff_patch.cc:638 +#, c-format msgid "files are identical\n" msgstr "les fichiers sont identiques\n" #: ../diff_patch.cc:575 +#, c-format msgid "internal 3-way merged ok\n" msgstr "" @@ -2129,6 +2129,7 @@ "[fusionné] %s\n" #: ../diff_patch.cc:606 +#, c-format msgid "lua merge3 hook merged ok\n" msgstr "" @@ -2151,6 +2152,7 @@ "[fusionné] %s\n" #: ../diff_patch.cc:663 +#, c-format msgid "lua merge2 hook merged ok\n" msgstr "" @@ -2161,149 +2163,151 @@ #: ../diff_patch.cc:711 #, c-format -msgid "file %s does not exist in working copy" -msgstr "le fichier %s n'existe pas dans la copie de travail" +msgid "file '%s' does not exist in working copy" +msgstr "le fichier « %s » n'existe pas dans la copie de travail" -#: ../diff_patch.cc:715 +#: ../diff_patch.cc:712 #, c-format -msgid "file %s in working copy has id %s, wanted %s" +msgid "'%s' in working copy is a directory, not a file" msgstr "" -#: ../file_io.cc:38 +#: ../diff_patch.cc:716 #, c-format -msgid "initial path is %s\n" -msgstr "le chemin initial est %s\n" - -#: ../file_io.cc:51 -#, c-format -msgid "searching for '%s' directory with root '%s'\n" +msgid "file %s in working copy has id %s, wanted %s" msgstr "" -#: ../file_io.cc:65 +#: ../file_io.cc:116 #, c-format -msgid "'%s' not found in '%s' with '%s' removed\n" +msgid "expected file '%s', but it is a directory." msgstr "" -#: ../file_io.cc:72 +#: ../file_io.cc:186 ../file_io.cc:193 #, c-format -msgid "search for '%s' ended at '%s' with '%s' removed\n" +msgid "" +"could not create directory '%s'\n" +"it is a file" msgstr "" +"impossible de créer le dossier « %s »\n" +"car c'est un fichier" -#: ../file_io.cc:77 +#: ../file_io.cc:188 #, c-format -msgid "'%s' does not exist\n" -msgstr "« %s » n'existe pas\n" - -#: ../file_io.cc:83 -#, c-format -msgid "'%s' is not a directory\n" +msgid "" +"could not create directory '%s'\n" +"%s" msgstr "" +"impossible de créer le dossier « %s »\n" +"%s" -#: ../file_io.cc:90 +#: ../file_io.cc:192 #, c-format -msgid "problems with '%s' (missing '.' or '..')\n" -msgstr "" +msgid "could not create directory '%s'" +msgstr "impossible de créer le dossier « %s »" -#: ../file_io.cc:116 -msgid "Searching for home directory\n" -msgstr "" +#: ../file_io.cc:205 +#, fuzzy, c-format +msgid "failed to create directory '%s' for '%s'" +msgstr "impossible de créer le dossier : %s : %s\n" -#: ../file_io.cc:122 -msgid "Home directory from MONOTONE_HOME\n" -msgstr "" +#: ../file_io.cc:213 +#, c-format +msgid "file to delete '%s' does not exist" +msgstr "le fichier à supprimer « %s » n'existe pas" -#: ../file_io.cc:132 -msgid "Home directory from HOME\n" -msgstr "" +#: ../file_io.cc:214 +#, fuzzy, c-format +msgid "file to delete, '%s', is not a file but a directory" +msgstr "le fichier à supprimer « %s » n'existe pas" -#: ../file_io.cc:139 -msgid "Home directory from USERPROFILE\n" -msgstr "" +#: ../file_io.cc:222 +#, fuzzy, c-format +msgid "directory to delete, '%s', does not exist" +msgstr "le dossier à supprimer « %s » n'existe pas" -#: ../file_io.cc:148 -msgid "Home directory from HOMEDRIVE+HOMEPATH\n" -msgstr "" +#: ../file_io.cc:223 +#, fuzzy, c-format +msgid "directory to delete, '%s', is a file" +msgstr "le dossier à supprimer « %s » n'existe pas" -#. And if things _still_ didn't work, give up. -#: ../file_io.cc:152 -msgid "" -"could not find home directory (tried MONOTONE_HOME, HOME (if cygwin/mingw), " -"USERPROFILE, HOMEDRIVE/HOMEPATH" +#: ../file_io.cc:232 +#, c-format +msgid "rename source file '%s' does not exist" msgstr "" -#: ../file_io.cc:160 +#: ../file_io.cc:233 #, c-format -msgid "could not find home directory for uid %d" +msgid "rename source file '%s' is a directory -- bug in monotone?" msgstr "" -#: ../file_io.cc:205 +#: ../file_io.cc:236 ../file_io.cc:249 +#, fuzzy, c-format +msgid "rename target '%s' already exists" +msgstr "le fichier pid « %s » existe déjà" + +#: ../file_io.cc:245 #, c-format -msgid "could not find home directory for user %s" +msgid "rename source dir '%s' does not exist" msgstr "" -#: ../file_io.cc:268 +#: ../file_io.cc:246 #, c-format -msgid "expected file '%s', but it is a directory." +msgid "rename source dir '%s' is a file -- bug in monotone?" msgstr "" -#: ../file_io.cc:295 ../file_io.cc:303 -#, c-format -msgid "file to delete '%s' does not exist" -msgstr "le fichier à supprimer « %s » n'existe pas" +#: ../file_io.cc:260 +#, fuzzy, c-format +msgid "rename source path '%s' does not exist" +msgstr "le chemin %s n'existe pas" -#: ../file_io.cc:311 ../file_io.cc:319 +#: ../file_io.cc:275 #, c-format -msgid "directory to delete '%s' does not exist" -msgstr "le dossier à supprimer « %s » n'existe pas" +msgid "file %s does not exist" +msgstr "le fichier %s n'existe pas" -#: ../file_io.cc:328 ../file_io.cc:340 +#: ../file_io.cc:276 #, c-format -msgid "rename source file '%s' does not exist" +msgid "file %s cannot be read as data; it is a directory" msgstr "" -#: ../file_io.cc:330 ../file_io.cc:342 +#: ../file_io.cc:280 #, c-format -msgid "rename target file '%s' already exists" +msgid "cannot open file %s for reading" msgstr "" -#: ../file_io.cc:352 ../file_io.cc:364 +#: ../file_io.cc:324 #, c-format -msgid "rename source dir '%s' does not exist" -msgstr "" +msgid "Cannot read standard input multiple times" +msgstr "Impossible de lire l'entrée standard plusieurs fois" -#: ../file_io.cc:354 ../file_io.cc:366 +#: ../file_io.cc:354 #, c-format -msgid "rename target dir '%s' already exists" +msgid "file '%s' cannot be overwritten as data; it is a directory" msgstr "" -#: ../file_io.cc:419 -msgid "Cannot read standard input multiple times" -msgstr "Impossible de lire l'entrée standard plusieurs fois" - -#: ../file_io.cc:510 +#: ../file_io.cc:368 #, c-format -msgid "file '%s' does not exist" -msgstr "le fichier « %s » n'existe pas" +msgid "cannot open file %s for writing" +msgstr "" -#: ../file_io.cc:551 +#: ../file_io.cc:375 #, c-format msgid "removing %s failed" msgstr "la suppression de %s a échouée" -#: ../file_io.cc:642 +#: ../file_io.cc:437 #, c-format msgid "ignoring book keeping entry %s\n" msgstr "" -#: ../file_io.cc:661 +#: ../file_io.cc:457 #, c-format msgid "caught runtime error %s constructing file path for %s\n" msgstr "" -#: ../file_io.cc:693 +#: ../file_io.cc:481 #, c-format -msgid "no such file or directory: %s" -msgstr "" +msgid "no such file or directory: '%s'" +msgstr "Aucun fichier ou répertoire de ce type : « %s »" #: ../keys.cc:42 #, c-format @@ -2311,10 +2315,12 @@ msgstr "" #: ../keys.cc:80 +#, c-format msgid "got empty passphrase from get_passphrase() hook" msgstr "la phrase de passe obtenue depuis get_passphrase() est vide" #: ../keys.cc:96 +#, c-format msgid "empty passphrase not allowed" msgstr "la phrase de passe ne doit pas être vide" @@ -2324,18 +2330,22 @@ msgstr "" #: ../keys.cc:108 +#, c-format msgid "empty passphrases not allowed, try again\n" msgstr "" #: ../keys.cc:109 ../keys.cc:116 +#, c-format msgid "too many failed passphrases\n" msgstr "" #: ../keys.cc:115 +#, c-format msgid "passphrases do not match, try again\n" msgstr "" #: ../keys.cc:122 +#, c-format msgid "no passphrase given" msgstr "" @@ -2374,124 +2384,123 @@ msgid "checking %d-byte (%d decoded) signature\n" msgstr "" -#: ../keys.cc:484 +#: ../keys.cc:521 #, c-format -msgid "no public key '%s' found in database" -msgstr "" - -#: ../keys.cc:495 -#, c-format msgid "passphrase for '%s' is incorrect" msgstr "" -#: ../lua.cc:105 +#: ../lua.cc:109 #, c-format msgid "lua failure: %s; stack = %s\n" msgstr "" -#: ../lua.cc:111 +#: ../lua.cc:115 #, c-format msgid "Lua::ok(): failed = %i" msgstr "" -#: ../lua.cc:120 +#: ../lua.cc:124 #, c-format msgid "lua stack: %s" msgstr "" -#: ../lua.cc:200 +#: ../lua.cc:204 #, c-format msgid "lua: extracted string = %s" msgstr "" -#: ../lua.cc:213 +#: ../lua.cc:217 #, c-format msgid "lua: extracted int = %i" msgstr "" -#: ../lua.cc:226 +#: ../lua.cc:230 #, c-format msgid "lua: extracted double = %i" msgstr "" -#: ../lua.cc:240 +#: ../lua.cc:244 #, c-format msgid "lua: extracted bool = %i" msgstr "" -#: ../lua.cc:360 +#: ../lua.cc:364 #, c-format msgid "loading lua hook %s" msgstr "" -#: ../lua.cc:523 +#: ../lua.cc:527 +#, c-format msgid "guess_binary called with an invalid parameter" msgstr "" -#: ../lua.cc:532 +#: ../lua.cc:557 +#, c-format msgid "Include called with an invalid parameter" msgstr "" -#: ../lua.cc:547 +#: ../lua.cc:572 +#, c-format msgid "IncludeDir called with an invalid parameter" msgstr "" -#: ../lua.cc:550 +#: ../lua.cc:575 #, c-format msgid "Directory '%s' does not exists" msgstr "le dossier « %s » n'existe pas" -#: ../lua.cc:551 +#: ../lua.cc:576 #, c-format msgid "'%s' is not a directory" msgstr "« %s » n'est pas un dossier" -#: ../lua.cc:570 ../lua.cc:696 +#: ../lua.cc:595 ../lua.cc:744 #, c-format msgid "lua error while loading rcfile '%s'" msgstr "" -#: ../lua.cc:693 ../lua.cc:706 +#: ../lua.cc:741 ../lua.cc:754 #, c-format msgid "opening rcfile '%s' ...\n" msgstr "ouverture du fichier rc « %s » ...\n" -#: ../lua.cc:697 ../lua.cc:709 +#: ../lua.cc:745 ../lua.cc:757 #, c-format msgid "'%s' is ok\n" msgstr "" -#: ../lua.cc:708 +#: ../lua.cc:756 #, c-format msgid "lua error while loading '%s'" msgstr "" -#: ../lua.cc:713 +#: ../lua.cc:761 #, c-format msgid "rcfile '%s' does not exist" msgstr "le fichier rc « %s » n'existe pas" -#: ../lua.cc:714 +#: ../lua.cc:762 #, c-format msgid "skipping nonexistent rcfile '%s'\n" msgstr "" -#: ../lua.cc:1155 +#: ../lua.cc:1203 #, c-format msgid "calling attr_init_function for %s" msgstr "" -#: ../lua.cc:1159 +#: ../lua.cc:1207 #, c-format msgid " calling an attr_init_function for %s" msgstr "" -#: ../lua.cc:1172 +#: ../lua.cc:1220 #, c-format msgid " added attr %s = %s" msgstr "" -#: ../lua.cc:1176 +#: ../lua.cc:1224 +#, c-format msgid " no attr added" msgstr "" @@ -2528,189 +2537,189 @@ msgid "mismatched node hash value %s, expected %s" msgstr "" -#: ../monotone.cc:50 +#: ../monotone.cc:51 msgid "select branch cert for operation" msgstr "" -#: ../monotone.cc:51 +#: ../monotone.cc:52 msgid "select revision id for operation" msgstr "" -#: ../monotone.cc:52 +#: ../monotone.cc:53 #, fuzzy msgid "set commit changelog message" msgstr "message du journal vide" -#: ../monotone.cc:53 +#: ../monotone.cc:54 msgid "set filename containing commit changelog message" msgstr "" -#: ../monotone.cc:54 +#: ../monotone.cc:55 msgid "override date/time for commit" msgstr "" -#: ../monotone.cc:55 +#: ../monotone.cc:56 msgid "override author for commit" msgstr "" -#: ../monotone.cc:56 +#: ../monotone.cc:57 msgid "limit the number of levels of directories to descend" msgstr "" -#: ../monotone.cc:57 +#: ../monotone.cc:58 msgid "limit the log output to the given number of entries" msgstr "" -#: ../monotone.cc:58 +#: ../monotone.cc:59 msgid "record process id of server" msgstr "" -#: ../monotone.cc:59 +#: ../monotone.cc:60 msgid "print a brief version of the normal output" msgstr "" -#: ../monotone.cc:60 +#: ../monotone.cc:61 msgid "print diffs along with logs" msgstr "" -#: ../monotone.cc:61 +#: ../monotone.cc:62 msgid "skip merges when printing logs" msgstr "" -#: ../monotone.cc:62 +#: ../monotone.cc:63 msgid "use the current arguments as the future default" msgstr "" -#: ../monotone.cc:63 +#: ../monotone.cc:64 msgid "leave out branches matching a pattern" msgstr "" -#: ../monotone.cc:64 -msgid "Use unified diff format" -msgstr "Utiliser le format diff unifié" - #: ../monotone.cc:65 -msgid "Use context diff format" -msgstr "Utiliser le format diff contextuel" +msgid "use unified diff format" +msgstr "utiliser le format diff unifié" #: ../monotone.cc:66 -msgid "Use external diff hook for generating diffs" -msgstr "" +msgid "use context diff format" +msgstr "utiliser le format diff contextuel" #: ../monotone.cc:67 -msgid "Argument to pass external diff hook" +msgid "use external diff hook for generating diffs" msgstr "" #: ../monotone.cc:68 -msgid "Use least common ancestor as ancestor for merge" +msgid "argument to pass external diff hook" msgstr "" #: ../monotone.cc:69 -msgid "Perform the associated file operation" +msgid "use least common ancestor as ancestor for merge" msgstr "" -#: ../monotone.cc:78 -msgid "print debug log to stderr while running" +#: ../monotone.cc:70 +msgid "perform the associated file operation" msgstr "" #: ../monotone.cc:79 +msgid "print debug log to stderr while running" +msgstr "" + +#: ../monotone.cc:80 msgid "file to dump debugging log to, on failure" msgstr "" -#: ../monotone.cc:80 +#: ../monotone.cc:81 msgid "suppress log and progress messages" msgstr "" -#: ../monotone.cc:81 +#: ../monotone.cc:82 msgid "display help message" msgstr "afficher le message d'aide" -#: ../monotone.cc:82 +#: ../monotone.cc:83 msgid "print version number, then exit" msgstr "afficher le numéro de version, puis quitte" -#: ../monotone.cc:83 +#: ../monotone.cc:84 msgid "print detailed version number, then exit" msgstr "afficher le numéro de version détaillée, puis quitte" -#: ../monotone.cc:84 +#: ../monotone.cc:85 msgid "insert command line arguments taken from the given file" msgstr "" -#: ../monotone.cc:85 -msgid "set ticker style (count|dot|none) [count]" +#: ../monotone.cc:86 +msgid "set ticker style (count|dot|none)" msgstr "" -#: ../monotone.cc:86 +#: ../monotone.cc:87 msgid "do not load standard lua hooks" msgstr "ne pas charger les hooks standards lua" -#: ../monotone.cc:87 +#: ../monotone.cc:88 msgid "do not load ~/.monotone/monotonerc or MT/monotonerc lua files" msgstr "" "ne pas charger les fichiers lua ~/.monotone/monotonerc ou MT/monotonerc" -#: ../monotone.cc:88 +#: ../monotone.cc:89 msgid "load extra rc file" msgstr "charger un fichier rc supplémentaire" -#: ../monotone.cc:89 +#: ../monotone.cc:90 msgid "set key for signatures" msgstr "" -#: ../monotone.cc:90 +#: ../monotone.cc:91 msgid "set name of database" msgstr "" -#: ../monotone.cc:91 +#: ../monotone.cc:92 msgid "limit search for working copy to specified root" msgstr "" -#: ../monotone.cc:92 +#: ../monotone.cc:93 msgid "verbose completion output" msgstr "" -#: ../monotone.cc:198 +#: ../monotone.cc:199 #, c-format msgid "problem parsing arguments from file %s: %s" msgstr "" -#: ../monotone.cc:207 +#: ../monotone.cc:208 #, c-format msgid "weird error when stuffing arguments read from %s: %s\n" msgstr "" -#: ../monotone.cc:257 +#: ../monotone.cc:258 #, c-format msgid "command line: %s\n" msgstr "ligne de commande : %s\n" -#: ../monotone.cc:260 +#: ../monotone.cc:261 #, c-format msgid "set locale: LC_ALL=%s\n" msgstr "paramétrage de la locale : LC_ALL=%s\n" -#: ../monotone.cc:455 +#: ../monotone.cc:457 #, c-format msgid "syntax error near the \"%s\" option: %s" msgstr "" -#: ../monotone.cc:494 +#: ../monotone.cc:496 #, c-format msgid "monotone %s doesn't use the option %s" -msgstr "" +msgstr "monotone %s n'utilise pas l'option %s" -#: ../monotone.cc:516 +#: ../monotone.cc:518 #, c-format msgid "Removed 'hidden' from option # %d\n" msgstr "" -#: ../monotone.cc:522 ../monotone.cc:533 +#: ../monotone.cc:524 ../monotone.cc:535 #, c-format msgid "Added 'hidden' to option # %d\n" msgstr "" -#: ../monotone.cc:529 +#: ../monotone.cc:531 #, c-format msgid "Options specific to 'monotone %s':" msgstr "Options spécifiques à « monotone %s » :" @@ -2721,16 +2730,18 @@ msgstr "%s (révision de base : %s)" #: ../mt_version.cc:34 -#, fuzzy, c-format +#, c-format msgid "" "Running on: %s\n" "Changes since base revision: %s\n" -msgstr "Changements depuis la révision de base :" +msgstr "" +"En cours d'exécution sur : %s\n" +"Changements depuis la révision de base : %s\n" #: ../netcmd.cc:42 #, c-format msgid "unknown item type 0x%x for '%s'" -msgstr "" +msgstr "type d'élément inconnu 0x%x pour « %s »" #: ../netcmd.cc:89 #, c-format @@ -2765,6 +2776,7 @@ #, c-format msgid "need %d bytes to decode %s at %d, only have %d" msgstr "" +"%d octets sont nécessaire pour décoder %s à %d, seulement %d sont disponibles" #: ../netio.hh:84 ../netio.hh:119 #, c-format @@ -2828,10 +2840,12 @@ #. But otherwise, we're ready to go! #: ../netsync.cc:746 +#, c-format msgid "all epochs processed, opening database valve\n" msgstr "" #: ../netsync.cc:834 +#, c-format msgid "dropping outgoing netcmd (because we're in error unwind mode)\n" msgstr "" @@ -2983,6 +2997,7 @@ msgstr "%d octets lu sur le descripteur de fichier %d (pair %s)\n" #: ../netsync.cc:1369 +#, c-format msgid "in error unwind mode, so throwing them into the bit bucket\n" msgstr "" @@ -2993,14 +3008,17 @@ #. we've flushed our error message, so it's time to get out. #: ../netsync.cc:1409 +#, c-format msgid "finished flushing output queue in error unwind mode, disconnecting\n" msgstr "" #: ../netsync.cc:1423 +#, c-format msgid "queueing 'bye' command\n" msgstr "" #: ../netsync.cc:1433 +#, c-format msgid "queueing 'error' command\n" msgstr "" @@ -3081,6 +3099,7 @@ msgstr "" #: ../netsync.cc:1687 +#, c-format msgid "received 'bye' netcmd\n" msgstr "" @@ -3124,6 +3143,7 @@ msgstr "" #: ../netsync.cc:1785 +#, c-format msgid "server key changed" msgstr "" @@ -3146,10 +3166,12 @@ msgstr "" #: ../netsync.cc:1885 +#, c-format msgid "rejected attempt at anonymous connection for write\n" msgstr "" #: ../netsync.cc:1892 +#, c-format msgid "rejected attempt at anonymous connection while running as sink\n" msgstr "" @@ -3164,6 +3186,7 @@ msgstr "" #: ../netsync.cc:1946 +#, c-format msgid "detected replay attack in auth netcmd\n" msgstr "" @@ -3216,10 +3239,12 @@ #. get our private key and sign back #: ../netsync.cc:2047 +#, c-format msgid "client signature OK, accepting authentication\n" msgstr "" #: ../netsync.cc:2069 +#, c-format msgid "bad client signature\n" msgstr "" @@ -3232,14 +3257,17 @@ msgstr "" #: ../netsync.cc:2100 +#, c-format msgid "server signature OK, accepting authentication\n" msgstr "" #: ../netsync.cc:2105 +#, c-format msgid "bad server signature\n" msgstr "" #: ../netsync.cc:2110 +#, c-format msgid "unknown server key\n" msgstr "" @@ -3253,11 +3281,6 @@ msgid "public key '%s' is also called '%s'\n" msgstr "" -#: ../netsync.cc:2194 -#, c-format -msgid "public key '%s' does not exist in our database" -msgstr "" - #: ../netsync.cc:2208 #, c-format msgid "revision '%s' does not exist in our database" @@ -3639,7 +3662,7 @@ msgstr "" #: ../netsync.cc:3323 -#, fuzzy, c-format +#, c-format msgid "read from fd %d (peer %s) closed OK after goodbye\n" msgstr "lecture depuis le fd %d (pair %s) fermée OK après aurevoir\n" @@ -3689,6 +3712,7 @@ msgstr "" #: ../netsync.cc:3417 +#, c-format msgid "accept() returned a dead client\n" msgstr "accept() à renvoyée un client mort\n" @@ -3715,12 +3739,12 @@ #: ../netsync.cc:3496 #, c-format msgid "fd %d (peer %s) processing finished, disconnecting\n" -msgstr "" +msgstr "traitement du fd %d (pair %s) terminé, déconnexion\n" #: ../netsync.cc:3518 #, c-format msgid "fd %d (peer %s) has been idle too long, disconnecting\n" -msgstr "" +msgstr "le fd %d (pair %s) est inactif depuis trop longtemps, déconnexion\n" #: ../netsync.cc:3524 #, c-format @@ -3758,6 +3782,7 @@ msgstr "" #: ../netsync.cc:3678 +#, c-format msgid "finding items to synchronize:\n" msgstr "recherche d'éléments à synchroniser :\n" @@ -3791,245 +3816,250 @@ msgid "network error: %s" msgstr "erreur réseau : %s" -#: ../packet.cc:324 +#: ../packet.cc:325 #, c-format msgid "writing delayed revision data packet for %s\n" msgstr "" -#: ../packet.cc:331 +#: ../packet.cc:332 #, c-format msgid "discarding revision data packet %s with unmet dependencies\n" msgstr "" -#: ../packet.cc:337 +#: ../packet.cc:338 #, c-format msgid "writing delayed manifest data packet for %s\n" msgstr "" -#: ../packet.cc:344 +#: ../packet.cc:345 #, c-format msgid "discarding manifest data packet %s with unmet dependencies\n" msgstr "" -#: ../packet.cc:350 +#: ../packet.cc:351 #, c-format msgid "writing delayed file data packet for %s\n" msgstr "" -#: ../packet.cc:363 +#: ../packet.cc:364 #, c-format msgid "writing delayed manifest %s packet for %s -> %s\n" msgstr "" -#: ../packet.cc:376 +#: ../packet.cc:377 #, c-format msgid "discarding manifest delta packet %s -> %s with unmet dependencies\n" msgstr "" -#: ../packet.cc:383 +#: ../packet.cc:384 #, c-format msgid "writing delayed file %s packet for %s -> %s\n" msgstr "" -#: ../packet.cc:396 +#: ../packet.cc:397 #, c-format msgid "discarding file delta packet %s -> %s with unmet dependencies\n" msgstr "" -#: ../packet.cc:403 +#: ../packet.cc:404 #, c-format msgid "writing delayed revision cert on %s\n" msgstr "" -#: ../packet.cc:410 +#: ../packet.cc:411 #, c-format msgid "discarding revision cert packet %s with unmet dependencies\n" msgstr "" -#: ../packet.cc:417 +#: ../packet.cc:418 #, c-format msgid "writing delayed public key %s\n" msgstr "" -#: ../packet.cc:430 +#: ../packet.cc:431 #, c-format msgid "writing delayed private key %s\n" msgstr "" -#: ../packet.cc:600 +#: ../packet.cc:601 #, c-format msgid "noting acceptence of revision %s\n" msgstr "" -#: ../packet.cc:613 +#: ../packet.cc:614 #, c-format msgid "noting acceptence of manifest %s\n" msgstr "" -#: ../packet.cc:626 +#: ../packet.cc:627 #, c-format msgid "noting acceptence of file %s\n" msgstr "" -#: ../packet.cc:648 +#: ../packet.cc:649 #, c-format msgid "skipping existing file version %s\n" msgstr "" -#: ../packet.cc:676 +#: ../packet.cc:677 #, c-format msgid "reconstructed file from delta '%s' -> '%s' has wrong id '%s'\n" msgstr "" -#: ../packet.cc:682 +#: ../packet.cc:683 #, c-format msgid "delaying file delta %s -> %s for preimage\n" msgstr "" -#: ../packet.cc:692 +#: ../packet.cc:693 #, c-format msgid "skipping delta to existing file version %s\n" msgstr "" -#: ../packet.cc:720 +#: ../packet.cc:721 #, c-format msgid "reconstructed file from reverse delta '%s' -> '%s' has wrong id '%s'\n" msgstr "" -#: ../packet.cc:726 +#: ../packet.cc:727 #, c-format msgid "delaying reverse file delta %s -> %s for preimage\n" msgstr "" -#: ../packet.cc:736 +#: ../packet.cc:737 #, c-format msgid "skipping reverse delta to existing file version %s\n" msgstr "" -#: ../packet.cc:753 +#: ../packet.cc:754 #, c-format msgid "skipping existing manifest version %s\n" msgstr "" -#: ../packet.cc:781 +#: ../packet.cc:782 #, c-format msgid "reconstructed manifest from delta '%s' -> '%s' has wrong id '%s'\n" msgstr "" -#: ../packet.cc:787 +#: ../packet.cc:788 #, c-format msgid "delaying manifest delta %s -> %s for preimage\n" msgstr "" -#: ../packet.cc:797 +#: ../packet.cc:798 #, c-format msgid "skipping delta to existing manifest version %s\n" msgstr "" -#: ../packet.cc:825 +#: ../packet.cc:826 #, c-format msgid "" "reconstructed manifest from reverse delta '%s' -> '%s' has wrong id '%s'\n" msgstr "" -#: ../packet.cc:831 +#: ../packet.cc:832 #, c-format msgid "delaying manifest reverse delta %s -> %s for preimage\n" msgstr "" -#: ../packet.cc:841 +#: ../packet.cc:842 #, c-format msgid "skipping reverse delta to existing manifest version %s\n" msgstr "" -#: ../packet.cc:863 +#: ../packet.cc:864 #, c-format msgid "delaying revision %s for new manifest %s\n" msgstr "" -#: ../packet.cc:877 +#: ../packet.cc:878 #, c-format msgid "delaying revision %s for old manifest %s\n" msgstr "" -#: ../packet.cc:887 +#: ../packet.cc:888 #, c-format msgid "delaying revision %s for old revision %s\n" msgstr "" -#: ../packet.cc:900 +#: ../packet.cc:901 #, c-format msgid "delaying revision %s for old file %s\n" msgstr "" -#: ../packet.cc:910 +#: ../packet.cc:911 #, c-format msgid "delaying revision %s for new file %s\n" msgstr "" -#: ../packet.cc:928 +#: ../packet.cc:929 #, c-format msgid "skipping existing revision %s\n" msgstr "" -#: ../packet.cc:946 +#: ../packet.cc:947 #, c-format msgid "delaying revision cert on %s\n" msgstr "" -#: ../packet.cc:959 +#: ../packet.cc:960 #, c-format msgid "skipping existing revision cert %s\n" msgstr "" -#: ../packet.cc:973 +#: ../packet.cc:974 #, c-format msgid "skipping prohibited public key %s\n" msgstr "" -#: ../packet.cc:986 +#: ../packet.cc:987 #, c-format msgid "key '%s' is not equal to key '%s' in database\n" msgstr "" "la clef « %s » n'est pas égale à la clef « %s » dans la base de données\n" -#: ../packet.cc:987 +#: ../packet.cc:988 #, c-format msgid "skipping existing public key %s\n" msgstr "" -#: ../packet.cc:1000 +#: ../packet.cc:1001 #, c-format msgid "skipping prohibited private key %s\n" msgstr "" -#: ../packet.cc:1009 +#: ../packet.cc:1010 #, c-format msgid "skipping existing private key %s\n" msgstr "" -#: ../packet.cc:1045 +#: ../packet.cc:1046 +#, c-format msgid "packet valve opened\n" msgstr "" -#: ../packet.cc:1057 +#: ../packet.cc:1058 #, c-format msgid "wrote %i queued packets\n" msgstr "" -#: ../packet.cc:1306 +#: ../packet.cc:1307 +#, c-format msgid "read data packet\n" msgstr "lecture d'un paquet de donnée\n" -#: ../packet.cc:1328 +#: ../packet.cc:1329 +#, c-format msgid "read delta packet\n" -msgstr "" +msgstr "lecture d'un paquet delta\n" -#: ../packet.cc:1359 +#: ../packet.cc:1360 +#, c-format msgid "read cert packet\n" msgstr "" -#: ../packet.cc:1385 +#: ../packet.cc:1386 +#, c-format msgid "read key data packet\n" msgstr "" @@ -4048,234 +4078,238 @@ msgid "parse failure %d:%d: expecting word\n" msgstr "" -#: ../rcs_import.cc:249 +#: ../rcs_import.cc:247 #, c-format msgid "Calculating time of %s\n" msgstr "" -#: ../rcs_import.cc:283 +#: ../rcs_import.cc:281 #, c-format msgid "version %s -> tag %s\n" msgstr "" -#: ../rcs_import.cc:450 +#: ../rcs_import.cc:448 +#, c-format msgid "skipping identity file edge\n" msgstr "" #. we already have a way to get to this old version, #. no need to insert another reconstruction path -#: ../rcs_import.cc:458 ../rcs_import.cc:484 +#: ../rcs_import.cc:456 ../rcs_import.cc:482 #, c-format msgid "existing path to %s found, skipping\n" msgstr "" -#: ../rcs_import.cc:476 +#: ../rcs_import.cc:474 +#, c-format msgid "skipping identity manifest edge\n" msgstr "" -#: ../rcs_import.cc:594 +#: ../rcs_import.cc:592 #, c-format msgid "version %s has %d lines\n" msgstr "" -#: ../rcs_import.cc:607 +#: ../rcs_import.cc:605 #, c-format msgid "following RCS edge %s -> %s\n" msgstr "" -#: ../rcs_import.cc:610 +#: ../rcs_import.cc:608 #, c-format msgid "constructed RCS version %s, inserting into database\n" msgstr "" -#: ../rcs_import.cc:653 +#: ../rcs_import.cc:651 #, c-format msgid "following RCS branch %s = '%s'\n" msgstr "" -#: ../rcs_import.cc:663 +#: ../rcs_import.cc:661 #, c-format msgid "finished RCS branch %s = '%s'\n" msgstr "" -#: ../rcs_import.cc:684 ../rcs_import.cc:733 +#: ../rcs_import.cc:682 ../rcs_import.cc:730 #, c-format msgid "parsing RCS file %s\n" msgstr "analyse du fichier RCS %s\n" -#: ../rcs_import.cc:686 ../rcs_import.cc:736 +#: ../rcs_import.cc:684 ../rcs_import.cc:733 #, c-format msgid "parsed RCS file %s OK\n" msgstr "analyse du fichier RCS %s OK\n" -#: ../rcs_import.cc:776 +#: ../rcs_import.cc:773 #, c-format msgid "importing file '%s'\n" msgstr "importation du fichier « %s »\n" -#: ../rcs_import.cc:848 +#: ../rcs_import.cc:845 #, c-format msgid "first version in branch %s would be %s\n" msgstr "" -#: ../rcs_import.cc:855 +#: ../rcs_import.cc:852 #, c-format msgid "file branchpoint for %s at %s\n" msgstr "" -#: ../rcs_import.cc:925 +#: ../rcs_import.cc:922 #, c-format msgid "error reading RCS file %s: %s\n" msgstr "erreur lors de la lecture du fichier RCS %s : %s\n" -#: ../rcs_import.cc:929 +#: ../rcs_import.cc:926 #, c-format msgid "skipping non-RCS file %s\n" msgstr "" -#: ../rcs_import.cc:1108 +#: ../rcs_import.cc:1105 #, c-format msgid "examining next commit [t:%d] [p:%s] [a:%s] [c:%s]\n" msgstr "" -#: ../rcs_import.cc:1121 +#: ../rcs_import.cc:1118 +#, c-format msgid "expiring cluster\n" msgstr "" -#: ../rcs_import.cc:1137 +#: ../rcs_import.cc:1134 #, c-format msgid "examining cluster %d to see if it touched %d\n" msgstr "" -#: ../rcs_import.cc:1145 +#: ../rcs_import.cc:1142 #, c-format msgid "found cluster touching %d: [t:%d] [a:%d] [c:%d]\n" msgstr "" -#: ../rcs_import.cc:1153 +#: ../rcs_import.cc:1150 #, c-format msgid "last modification time is %d\n" msgstr "la date de dernière modification est %d\n" -#: ../rcs_import.cc:1169 +#: ../rcs_import.cc:1166 #, c-format msgid "picked existing cluster [t:%d] [a:%d] [c:%d]\n" msgstr "" -#: ../rcs_import.cc:1183 +#: ../rcs_import.cc:1180 #, c-format msgid "building new cluster [t:%d] [a:%d] [c:%d]\n" msgstr "" #. now we are done this lineage; flush all remaining clusters -#: ../rcs_import.cc:1208 +#: ../rcs_import.cc:1205 +#, c-format msgid "finished branch commits, writing all pending clusters\n" msgstr "" -#: ../rcs_import.cc:1214 +#: ../rcs_import.cc:1211 +#, c-format msgid "finished writing pending clusters\n" msgstr "" -#: ../rcs_import.cc:1226 +#: ../rcs_import.cc:1223 #, c-format msgid "" "%s appears to be a CVS repository root directory\n" "try importing a module instead, with 'cvs_import %s/" msgstr "" -#: ../rcs_import.cc:1239 +#: ../rcs_import.cc:1236 +#, c-format msgid "need base --branch argument for importing" msgstr "" -#: ../rcs_import.cc:1251 +#: ../rcs_import.cc:1248 #, c-format msgid "path %s does not exist" msgstr "le chemin %s n'existe pas" -#: ../rcs_import.cc:1253 +#: ../rcs_import.cc:1249 #, c-format msgid "path %s is not a directory" msgstr "le chemin %s n'est pas un dossier" -#: ../rcs_import.cc:1256 +#: ../rcs_import.cc:1267 #, c-format -msgid "could not change directory to %s" -msgstr "" - -#: ../rcs_import.cc:1272 -#, c-format msgid "branch %s has %d entries\n" msgstr "" -#: ../rcs_import.cc:1282 +#: ../rcs_import.cc:1277 #, c-format msgid "trunk has %d entries\n" msgstr "" -#: ../rcs_import.cc:1335 +#: ../rcs_import.cc:1330 #, c-format msgid "initial cluster on branch %s has %d live entries\n" msgstr "" -#: ../rcs_import.cc:1342 +#: ../rcs_import.cc:1337 #, c-format msgid "initial cluster contains %s at %s\n" msgstr "" -#: ../rcs_import.cc:1388 +#: ../rcs_import.cc:1383 #, c-format msgid "storing manifest '%s' (base %s)\n" msgstr "" -#: ../rcs_import.cc:1393 +#: ../rcs_import.cc:1388 #, c-format msgid "storing head %s\n" msgstr "" -#: ../rcs_import.cc:1408 +#: ../rcs_import.cc:1403 +#, c-format msgid "skipping delta to null manifest\n" msgstr "" -#: ../rcs_import.cc:1420 +#: ../rcs_import.cc:1415 #, c-format msgid "skipping cyclical manifest delta %s -> %s\n" msgstr "" -#: ../rcs_import.cc:1426 +#: ../rcs_import.cc:1421 #, c-format msgid "writing full manifest %s\n" msgstr "" -#: ../rcs_import.cc:1436 +#: ../rcs_import.cc:1431 #, c-format msgid "storing manifest delta %s -> %s\n" msgstr "" -#: ../rcs_import.cc:1498 +#: ../rcs_import.cc:1493 #, c-format msgid "adding entry state '%s' on '%s'\n" msgstr "" -#: ../rcs_import.cc:1505 +#: ../rcs_import.cc:1500 #, c-format msgid "applying state delta on '%s' : '%s' -> '%s'\n" msgstr "" -#: ../rcs_import.cc:1516 +#: ../rcs_import.cc:1511 #, c-format msgid "deleting entry state '%s' on '%s'\n" msgstr "" -#: ../rcs_import.cc:1535 +#: ../rcs_import.cc:1530 +#, c-format msgid "BEGIN consume_cluster()\n" msgstr "" -#: ../rcs_import.cc:1555 +#: ../rcs_import.cc:1550 #, c-format msgid "END consume_cluster('%s') (parent '%s')\n" msgstr "" #: ../revision.cc:126 +#, c-format msgid "verifying new revisions (this may take a while)\n" msgstr "vérification des nouvelles révisions (ceci peut prendre du temps)\n" @@ -4295,6 +4329,7 @@ msgstr "" #: ../revision.cc:249 +#, c-format msgid "already checked common ancestor, so done\n" msgstr "" @@ -4308,139 +4343,139 @@ msgid "loading parents for node %d\n" msgstr "" -#: ../revision.cc:330 +#: ../revision.cc:332 #, c-format msgid "parent %s -> node %d\n" msgstr "parent %s -> noeud %d\n" -#: ../revision.cc:480 +#: ../revision.cc:482 #, c-format msgid "found %d intersecting nodes\n" msgstr "" -#: ../revision.cc:533 +#: ../revision.cc:535 #, c-format msgid "searching for common ancestor, left=%s right=%s\n" msgstr "" -#: ../revision.cc:538 +#: ../revision.cc:540 #, c-format msgid "common ancestor scan [par=%d,anc=%d,dom=%d]\n" msgstr "" -#: ../revision.cc:543 +#: ../revision.cc:545 #, c-format msgid "found node %d, ancestor of left %s and dominating right %s\n" msgstr "" -#: ../revision.cc:550 +#: ../revision.cc:552 #, c-format msgid "found node %d, ancestor of right %s and dominating left %s\n" msgstr "" -#: ../revision.cc:587 +#: ../revision.cc:589 #, c-format msgid "searching for least common ancestor, left=%s right=%s\n" msgstr "" -#: ../revision.cc:591 +#: ../revision.cc:593 #, c-format msgid "least common ancestor scan [par=%d,anc=%d]\n" msgstr "" -#: ../revision.cc:596 +#: ../revision.cc:598 #, c-format msgid "found node %d, ancestor of left %s and right %s\n" msgstr "" -#: ../revision.cc:650 +#: ../revision.cc:652 #, c-format msgid "checking whether %s is an ancestor of %s\n" msgstr "" #. now stick them in our ordering (if wanted) and remove them from the #. graph, calculating the new roots as we go -#: ../revision.cc:762 +#: ../revision.cc:764 #, c-format msgid "new root: %s\n" msgstr "nouvelle racine : %s\n" -#: ../revision.cc:777 +#: ../revision.cc:779 #, c-format msgid "new leaf: %s\n" msgstr "nouvelle feuille : %s\n" -#: ../revision.cc:919 +#: ../revision.cc:921 #, c-format msgid "exploring changesets from parents of %s, seeking towards %s\n" msgstr "" -#: ../revision.cc:932 +#: ../revision.cc:934 #, c-format msgid "considering parent %s of %s\n" msgstr "" -#: ../revision.cc:958 +#: ../revision.cc:960 #, c-format msgid "revision %s is relevant, composing with edge to %s\n" msgstr "" -#: ../revision.cc:965 +#: ../revision.cc:967 #, c-format msgid "parent %s of %s is not relevant\n" msgstr "" -#: ../revision.cc:1001 +#: ../revision.cc:1003 #, c-format msgid "adding parents of %s to subgraph\n" msgstr "" -#: ../revision.cc:1011 +#: ../revision.cc:1013 #, c-format msgid "found parent %s of %s\n" msgstr "" -#: ../revision.cc:1015 +#: ../revision.cc:1017 #, c-format msgid "adding parent %s to next frontier\n" msgstr "" -#: ../revision.cc:1030 +#: ../revision.cc:1032 #, c-format msgid "calculating composite changeset between %s and %s\n" msgstr "" -#: ../revision.cc:1048 +#: ../revision.cc:1050 #, c-format msgid "calculating changeset from %s to %s\n" msgstr "" -#: ../revision.cc:1052 +#: ../revision.cc:1054 #, c-format msgid "no common ancestor for %s and %s\n" msgstr "" -#: ../revision.cc:1053 +#: ../revision.cc:1055 #, c-format msgid "common ancestor is %s\n" msgstr "l'ancêtre commun est %s\n" -#: ../revision.cc:1084 +#: ../revision.cc:1086 #, c-format msgid "analyzing manifest changes from '%s' -> '%s'\n" msgstr "" -#: ../revision.cc:1097 +#: ../revision.cc:1099 #, c-format msgid "splitting ancestry for file %s\n" msgstr "" -#: ../revision.cc:1164 +#: ../revision.cc:1166 #, c-format msgid "noting ancestry from child %d -> parent %d\n" msgstr "" -#: ../revision.cc:1197 +#: ../revision.cc:1199 #, c-format msgid "setting epoch for %s to %s\n" msgstr "" @@ -4463,80 +4498,83 @@ #. FIXME: remove this method eventually, since it is (mildly) destructive on #. history, and isn't really doing anything that necessarily needs to happen #. anyway. -#: ../revision.cc:1253 +#: ../revision.cc:1255 +#, c-format msgid "scanning for nodes with 3+ parents\n" msgstr "" -#: ../revision.cc:1294 +#: ../revision.cc:1296 #, c-format msgid "optimizing out redundant edge %i -> %i\n" msgstr "" -#: ../revision.cc:1321 +#: ../revision.cc:1323 #, c-format msgid "rebuilding %d nodes\n" msgstr "" -#: ../revision.cc:1358 +#: ../revision.cc:1360 #, c-format msgid "node %d = manifest %s\n" msgstr "" -#: ../revision.cc:1369 +#: ../revision.cc:1371 #, c-format msgid "loaded '%s' manifest cert for node %s\n" msgstr "" -#: ../revision.cc:1397 +#: ../revision.cc:1399 #, c-format msgid "node %d = revision %s = manifest %s\n" msgstr "noeud %d = révision %s = manifeste %s\n" -#: ../revision.cc:1409 +#: ../revision.cc:1411 #, c-format msgid "loaded '%s' revision cert for node %s\n" msgstr "" -#: ../revision.cc:1433 +#: ../revision.cc:1435 #, c-format msgid "processing node %d\n" msgstr "" -#: ../revision.cc:1437 +#: ../revision.cc:1439 #, c-format msgid "node %d already processed, skipping\n" msgstr "" -#: ../revision.cc:1451 +#: ../revision.cc:1453 #, c-format msgid "node %d is a root node\n" msgstr "" -#: ../revision.cc:1467 ../revision.cc:1550 +#: ../revision.cc:1469 ../revision.cc:1552 #, c-format msgid "parent node %d = revision %s\n" msgstr "" -#: ../revision.cc:1529 +#: ../revision.cc:1531 #, c-format msgid "processing edge from child %d -> parent %d\n" msgstr "" -#: ../revision.cc:1567 +#: ../revision.cc:1569 #, c-format msgid "mapped node %d to revision %s\n" msgstr "" -#: ../revision.cc:1573 +#: ../revision.cc:1575 #, c-format msgid "skipping already existing revision %s\n" msgstr "" -#: ../revision.cc:1585 +#: ../revision.cc:1587 +#, c-format msgid "rebuilding revision graph from existing graph\n" msgstr "" -#: ../revision.cc:1618 +#: ../revision.cc:1620 +#, c-format msgid "rebuilding revision graph from manifest certs\n" msgstr "" @@ -4545,6 +4583,16 @@ msgid "started up on %s\n" msgstr "" +#: ../sanity.cc:53 +#, c-format +msgid "wrote debugging log to %s" +msgstr "" + +#: ../sanity.cc:56 +#, c-format +msgid "failed to write debugging log to %s" +msgstr "impossible d'écrire le journal de debogage sur %s" + #: ../sanity.cc:107 #, c-format msgid "fatal: formatter failed on %s:%d: %s" @@ -4559,6 +4607,7 @@ msgstr "erreur :" #: ../sanity.cc:230 +#, c-format msgid "ignoring request to give last gasp; already in process of dumping\n" msgstr "" @@ -4573,23 +4622,15 @@ msgstr "" #: ../sanity.cc:250 ../sanity.cc:256 +#, c-format msgid "ignoring error trigged by saving work set to debug log" msgstr "" #: ../sanity.cc:260 -msgid "finished saving work set" -msgstr "" - -#: ../sanity.hh:239 #, c-format -msgid "----- begin '%s' (in %s, at %s:%d)\n" +msgid "finished saving work set" msgstr "" -#: ../sanity.hh:243 -#, c-format -msgid "----- end '%s' (in %s, at %s:%d)\n" -msgstr "" - #: ../schema_migration.cc:262 #, c-format msgid "database schema %s is unknown; cannot perform migration" @@ -4608,32 +4649,32 @@ "aucune migration n'a été effectuée; le schéma de la base de données est déjà " "à jour en %s\n" -#: ../transforms.cc:524 +#: ../transforms.cc:520 #, c-format msgid "converting %d bytes from %s to %s\n" msgstr "conversion de %d octets de %s en %s\n" -#: ../transforms.cc:530 +#: ../transforms.cc:526 #, c-format msgid "failed to convert string from %s to %s: '%s'" msgstr "impossible de convertir la chaîne de %s en %s : « %s »" -#: ../transforms.cc:578 +#: ../transforms.cc:651 #, c-format msgid "converting %d bytes from IDNA ACE to UTF-8\n" msgstr "" -#: ../transforms.cc:581 ../transforms.cc:595 +#: ../transforms.cc:654 ../transforms.cc:668 #, c-format msgid "error converting %d UTF-8 bytes to IDNA ACE: %s" msgstr "" -#: ../transforms.cc:592 +#: ../transforms.cc:665 #, c-format msgid "converting %d bytes from UTF-8 to IDNA ACE\n" msgstr "conversion de %d octets d'UTF-8 en IDNA ACE\n" -#: ../transforms.cc:861 +#: ../transforms.cc:813 #, c-format msgid "doing linesep conversion to %s\n" msgstr "" @@ -4656,7 +4697,7 @@ msgid "%d" msgstr "%d" -#: ../ui.cc:323 +#: ../ui.cc:325 #, c-format msgid "" "fatal: %s\n" @@ -4665,7 +4706,7 @@ "and a description of what you were doing to %s.\n" msgstr "" -#: ../ui.cc:366 +#: ../ui.cc:368 msgid "monotone: " msgstr "" @@ -4695,74 +4736,45 @@ msgstr "" #: ../update.cc:160 +#, c-format msgid "cannot determine branch for update" -msgstr "" +msgstr "impossible de déterminer la branche pour la mise à jour" -#: ../vocab.cc:57 +#: ../vocab.cc:53 #, c-format msgid "hex encoded ID '%s' size != %d" msgstr "" -#: ../vocab.cc:60 +#: ../vocab.cc:56 #, c-format msgid "bad character '%c' in id name '%s'" msgstr "" -#: ../vocab.cc:73 +#: ../vocab.cc:69 #, c-format msgid "bad character '%c' in ace string '%s'" msgstr "" -#: ../vocab.cc:87 +#: ../vocab.cc:83 #, c-format msgid "bad character '%c' in cert name '%s'" msgstr "" -#: ../vocab.cc:100 +#: ../vocab.cc:96 #, c-format msgid "bad character '%c' in key name '%s'" msgstr "" -#: ../vocab.cc:118 +#: ../vocab.cc:114 #, c-format msgid "Invalid key length of %d bytes" -msgstr "" +msgstr "Longueur de clef invalide de %d octets" -#: ../vocab.cc:136 +#: ../vocab.cc:132 #, c-format msgid "Invalid hmac length of %d bytes" msgstr "Longueur hmac invalide de %d octets" -#: ../vocab.cc:166 -#, c-format -msgid "prohibited absolute path '%s'" -msgstr "" - -#: ../vocab.cc:171 -#, c-format -msgid "empty path component in '%s'" -msgstr "" - -#: ../vocab.cc:174 -#, c-format -msgid "prohibited path component '%s' in '%s'" -msgstr "" - -#: ../vocab.cc:178 -#, c-format -msgid "bad character '%d' in path component '%s' of '%s'" -msgstr "" - -#: ../vocab.cc:184 -#, c-format -msgid "null byte in path component '%s' of '%s'" -msgstr "" - -#: ../vocab.cc:239 -#, c-format -msgid "prohibited book-keeping path in '%s'" -msgstr "" - #: ../work.cc:64 #, c-format msgid "skipping ignorable file %s\n" @@ -4778,31 +4790,27 @@ msgid "adding %s to working copy add set\n" msgstr "" -#: ../work.cc:102 ../work.cc:208 -msgid "invalid path ''" +#: ../work.cc:136 +#, c-format +msgid "adding attribute '%s' on file %s to %s\n" msgstr "" -#: ../work.cc:104 +#: ../work.cc:203 #, c-format -msgid "path %s does not exist\n" -msgstr "le chemin %s n'existe pas\n" - -#: ../work.cc:141 -#, c-format -msgid "adding attribute '%s' on file %s to %s\n" +msgid "invalid path ''" msgstr "" -#: ../work.cc:212 +#: ../work.cc:207 #, c-format msgid "skipping %s, not currently tracked\n" msgstr "" -#: ../work.cc:216 +#: ../work.cc:211 #, c-format msgid "adding %s to working copy delete set\n" msgstr "" -#: ../work.cc:220 +#: ../work.cc:215 #, c-format msgid "" "sorry -- 'drop ' is currently broken.\n" @@ -4811,147 +4819,180 @@ "désolé mais « drop  » est actuellement cassé.\n" "essayez « find %s -type f | monotone drop address@hidden" -#: ../work.cc:232 +#: ../work.cc:227 #, c-format msgid "dropped attributes for file %s from %s\n" msgstr "" -#: ../work.cc:237 +#: ../work.cc:253 #, c-format -msgid "Can't remove %s: %s\n" -msgstr "" - -#: ../work.cc:261 msgid "invalid source path ''" msgstr "" -#: ../work.cc:262 +#: ../work.cc:254 +#, c-format msgid "invalid destination path ''" msgstr "" -#: ../work.cc:273 +#: ../work.cc:265 #, c-format msgid "%s does not exist in current revision\n" msgstr "" -#: ../work.cc:276 +#: ../work.cc:268 #, c-format msgid "%s already exists in current revision\n" msgstr "" -#: ../work.cc:278 +#: ../work.cc:270 #, c-format msgid "adding %s -> %s to working copy rename set\n" msgstr "" -#: ../work.cc:287 +#: ../work.cc:293 #, c-format -msgid "Can't rename %s to %s: %s\n" -msgstr "" - -#: ../work.cc:304 -#, c-format msgid "%s has existing attributes in %s; clean them up first" msgstr "" -#: ../work.cc:313 +#: ../work.cc:302 #, c-format msgid "moving attributes for %s to %s\n" msgstr "" -#: ../work.cc:332 +#: ../work.cc:321 #, c-format msgid "work path is %s\n" msgstr "" -#: ../work.cc:341 +#: ../work.cc:330 #, c-format msgid "checking for un-committed work file %s\n" msgstr "" -#: ../work.cc:345 +#: ../work.cc:334 #, c-format msgid "read rearrangement from %s\n" msgstr "" -#: ../work.cc:349 +#: ../work.cc:338 #, c-format msgid "no un-committed work file %s\n" msgstr "" -#: ../work.cc:386 +#: ../work.cc:375 #, c-format msgid "revision path is %s\n" msgstr "" -#: ../work.cc:396 +#: ../work.cc:385 #, c-format -msgid "working copy is corrupt: %s does not exist\n" +msgid "working copy is corrupt: %s does not exist" +msgstr "la copie de travail est corrompue : %s n'existe pas" + +#: ../work.cc:386 +#, c-format +msgid "working copy is corrupt: %s is a directory" msgstr "" -#: ../work.cc:399 +#: ../work.cc:389 #, c-format msgid "loading revision id from %s\n" msgstr "" -#: ../work.cc:406 +#: ../work.cc:396 #, c-format msgid "Problem with working directory: %s is unreadable" msgstr "" -#: ../work.cc:415 +#: ../work.cc:405 #, c-format msgid "writing revision id to %s\n" msgstr "" -#: ../work.cc:434 +#: ../work.cc:424 #, c-format msgid "base revision %s does not exist in database\n" msgstr "" -#: ../work.cc:437 +#: ../work.cc:427 #, c-format msgid "old manifest is %s\n" msgstr "" -#: ../work.cc:440 +#: ../work.cc:430 #, c-format msgid "base manifest %s does not exist in database\n" msgstr "" -#: ../work.cc:445 +#: ../work.cc:435 #, c-format msgid "old manifest has %d entries\n" msgstr "" -#: ../work.cc:466 +#: ../work.cc:456 #, c-format msgid "user log path is %s\n" msgstr "" -#: ../work.cc:515 +#: ../work.cc:505 #, c-format msgid "options path is %s\n" msgstr "" -#: ../work.cc:562 +#: ../work.cc:552 #, c-format msgid "local dump path is %s\n" msgstr "" -#: ../work.cc:614 +#: ../work.cc:604 #, c-format msgid "attribute map path is %s\n" msgstr "" #: ../xdelta.cc:345 +#, c-format msgid "computing binary delta instructions\n" msgstr "" #: ../xdelta.cc:347 +#, c-format msgid "computed binary delta instructions\n" msgstr "" +#~ msgid "" +#~ "merge of %s\n" +#~ " and %s\n" +#~ msgstr "" +#~ "fusion de %s\n" +#~ " et %s\n" + +#~ msgid "" +#~ "explicit_merge of %s\n" +#~ " and %s\n" +#~ " using ancestor %s\n" +#~ " to branch '%s'\n" +#~ msgstr "" +#~ "fusion explicite de %s\n" +#~ " et %s\n" +#~ " avec pour ancêtre %s\n" +#~ " vers la branche %s\n" + +#, fuzzy +#~ msgid "public key '%s' not found in database" +#~ msgstr "la clef « %s » n'existe pas dans la base de données" + +#~ msgid "new revision %s\n" +#~ msgstr "nouvelle révisions %s\n" + +#~ msgid "initial path is %s\n" +#~ msgstr "le chemin initial est %s\n" + +#~ msgid "'%s' does not exist\n" +#~ msgstr "« %s » n'existe pas\n" + +#~ msgid "path %s does not exist\n" +#~ msgstr "le chemin %s n'existe pas\n" + #~ msgid "runtime error: %s\n" #~ msgstr "erreur d'exécution : %s\n" ======================================================================== --- revision.cc 5a02450e4801bc630e837aa9726cfb4d36b2e3a6 +++ revision.cc 278be7ae9f1e835cf402808d651e5a1d1a49d72f @@ -315,10 +315,12 @@ // The null revision is not a parent for purposes of finding common // ancestors. for (std::set::iterator p = imm_parents.begin(); - p != imm_parents.end(); ++p) + p != imm_parents.end(); ) { if (null_id(*p)) - imm_parents.erase(p); + imm_parents.erase(p++); + else + ++p; } shared_bitmap bits = shared_bitmap(new bitmap(parents.size())); ======================================================================== --- sanity.cc 7b3c21bc6bcc1b0b365d7ba19a1c06377a7b3cbe +++ sanity.cc d43cf000a18c156b97527e0724635b050159d16d @@ -287,3 +287,14 @@ out = obj; } + +void MusingBase::gasp(const std::string & objstr, std::string & out) const +{ + out = (boost::format("----- begin '%s' (in %s, at %s:%d)\n" + "%s" + "----- end '%s' (in %s, at %s:%d)\n") + % name % func % file % line + % objstr + % name % func % file % line + ).str(); +} ======================================================================== --- sanity.hh f9cefbfdafc2280724a4214c250108851a56d34d +++ sanity.hh 4b60e04581e65bb1426c17f8807b37ec0e7775d8 @@ -17,6 +17,7 @@ #include // Required for ENABLE_NLS #include "i18n.h" +#include "ui.hh" #include "quick_alloc.hh" // to get the QA() macro @@ -91,10 +92,10 @@ extern sanity global_sanity; // F is for when you want to build a boost formatter for display -#define F(str) boost::format(gettext(str)) +#define F(str) boost::format(gettext(str), ui.user_locale) // FP is for when you want to build a boost formatter for displaying a plural -#define FP(str1, strn, count) boost::format(ngettext(str1, strn, count)) +#define FP(str1, strn, count) boost::format(ngettext(str1, strn, count), ui.user_locale) // L is for logging, you can log all you want #define L(fmt) global_sanity.log(fmt, __FILE__, __LINE__) @@ -220,29 +221,41 @@ virtual void gasp(std::string & out) const = 0; }; + +class MusingBase +{ + char const * name; + char const * file; + char const * func; + int line; + +protected: + MusingBase(char const * name, char const * file, int line, char const * func) + : name(name), file(file), func(func), line(line) {} + + void gasp(const std::string & objstr, std::string & out) const; +}; + + template -class Musing : public MusingI +class Musing : public MusingI, private MusingBase { public: Musing(T const & obj, char const * name, char const * file, int line, char const * func) - : obj(obj), name(name), file(file), line(line), func(func) {} + : MusingBase(name, file, line, func), obj(obj) {} virtual void gasp(std::string & out) const; private: T const & obj; - char const * name; - char const * file; - int line; - char const * func; }; + template void Musing::gasp(std::string & out) const { - out = (F("----- begin '%s' (in %s, at %s:%d)\n") % name % func % file % line).str(); std::string tmp; dump(obj, tmp); - out += tmp; - out += (F("----- end '%s' (in %s, at %s:%d)\n") % name % func % file % line).str(); + + MusingBase::gasp(tmp, out); } // Yes, this is insane. No, it doesn't work if you do something more sane. ======================================================================== --- schema.sql ac99524347304a61fe2d857bc45d1bcca73adb6e +++ schema.sql 513edf45fe7238d23513b7062d965000271e2d67 @@ -13,6 +13,8 @@ -- licensed to the public under the terms of the GNU GPL 2.1+ -- see the file COPYING for details +-- Transactions avoid syncing for each action, db init gets faster. +BEGIN; -- primary data structures concerned with storing and -- versionning state-of-tree configurations @@ -117,3 +119,5 @@ value not null, -- var value unique(domain, name) ); + +COMMIT; ======================================================================== --- std_hooks.lua 0408707bb6b97eae7f8da61af7b35364dbd5a189 +++ std_hooks.lua 3aa6ea33c6bbb6e43c63dd4ff8ed353f3b9d4ce3 @@ -19,8 +19,17 @@ return ret end +-- Wrapper around execute to let user confirm in the case where a subprocess +-- returns immediately +-- This is needed to work around some brokenness with some merge tools +-- (e.g. on OS X) +function execute_confirm(path, ...) + execute(path, unpack(arg)) + print("Press enter when the subprocess has completed") + io.read() + return ret +end - -- attributes are persistent metadata about files (such as execute -- bit, ACLs, various special flags) which we want to have set and -- re-set any time the files are modified. the attributes themselves @@ -63,6 +72,24 @@ function ignore_file(name) + -- project specific + if (ignored_files == nil) then + ignored_files = {} + local ignfile = io.open(".mt-ignore", "r") + if (ignfile ~= nil) then + local line = ignfile:read() + while (line ~= nil) + do + table.insert(ignored_files, line) + line = ignfile:read() + end + io.close(ignfile) + end + end + for i, line in pairs(ignored_files) + do + if (regex.search(line, name)) then return true end + end -- c/c++ if (string.find(name, "%.a$")) then return true end if (string.find(name, "%.so$")) then return true end @@ -107,6 +134,11 @@ if (string.find(name, "^.cdv/")) then return true end if (string.find(name, "^.git/")) then return true end if (string.find(name, "%.scc$")) then return true end + -- desktop/directory configuration metadata + if (string.find(name, "^.DS_Store$")) then return true end + if (string.find(name, "/.DS_Store$")) then return true end + if (string.find(name, "^desktop.ini$")) then return true end + if (string.find(name, "/desktop.ini$")) then return true end return false; end @@ -131,10 +163,7 @@ if (string.find(lowname, "%.sql$")) then return false end -- unknown - read file and use the guess-binary -- monotone built-in function - filedata=read_contents_of_file(name, "rb") - if (filedata ~= nil) then return guess_binary(filedata) end - -- still unknown (file empty or unreadable) - report it as nil - return nil + return guess_binary_file_contents(name) end function edit_comment(basetext, user_log_message) @@ -279,29 +308,45 @@ end end -function merge3_vim_cmd(vim, lfile, afile, rfile, outfile) +function merge3_vim_cmd(vim, afile, lfile, rfile, outfile) return function() return execute(vim, "-f", "-d", "-c", string.format("file %s", outfile), - lfile, afile, rfile) + afile, lfile, rfile) end end +function merge3_rcsmerge_vim_cmd(merge, vim, lfile, afile, rfile, outfile) + return + function() + -- XXX: This is tough - should we check if conflict markers stay or not? + -- If so, we should certainly give the user some way to still force + -- the merge to proceed since they can appear in the files (and I saw + -- that). --pasky + if execute(merge, lfile, afile, rfile) == 0 then + copy_text_file(lfile, outfile); + return 0 + end + return execute(vim, "-f", "-c", string.format("file %s", outfile), + lfile) + end +end + function merge2_emacs_cmd(emacs, lfile, rfile, outfile) local elisp = "(ediff-merge-files \"%s\" \"%s\" nil \"%s\")" return function() - return execute(emacs, "-no-init-file", "-eval", + return execute(emacs, "-eval", string.format(elisp, lfile, rfile, outfile)) end end function merge3_emacs_cmd(emacs, lfile, afile, rfile, outfile) local elisp = "(ediff-merge-files-with-ancestor \"%s\" \"%s\" \"%s\" nil \"%s\")" - local cmd_fmt = "%s -no-init-file -eval " .. elisp + local cmd_fmt = "%s -eval " .. elisp return function() - execute(emacs, "-no-init-file", "-eval", + execute(emacs, "-eval", string.format(elisp, lfile, rfile, afile, outfile)) end end @@ -356,6 +401,22 @@ end end +function merge2_opendiff_cmd(left_path, right_path, merged_path, lfile, rfile, outfile) + return + function() + -- As opendiff immediately returns, let user confirm manually + return execute_confirm("opendiff",lfile,rfile,"-merge",outfile) + end +end + +function merge3_opendiff_cmd(left_path, anc_path, right_path, merged_path, lfile, afile, rfile, outfile) + return + function() + -- As opendiff immediately returns, let user confirm manually + execute_confirm("opendiff",lfile,rfile,"-ancestor",afile,"-merge",outfile) + end +end + function write_to_temporary_file(data) tmp, filename = temp_file() if (tmp == nil) then @@ -366,6 +427,22 @@ return filename end +function copy_text_file(srcname, destname) + src = io.open(srcname, "r") + if (src == nil) then return nil end + dest = io.open(destname, "w") + if (dest == nil) then return nil end + + while true do + local line = src:read() + if line == nil then break end + dest:write(line, "\n") + end + + io.close(dest) + io.close(src) +end + function read_contents_of_file(filename, mode) tmp = io.open(filename, mode) if (tmp == nil) then @@ -397,6 +474,8 @@ cmd = merge2_kdiff3_cmd (left_path, right_path, merged_path, lfile, rfile, outfile) elseif program_exists_in_path ("xxdiff") then cmd = merge2_xxdiff_cmd (left_path, right_path, merged_path, lfile, rfile, outfile) + elseif program_exists_in_path ("opendiff") then + cmd = merge2_opendiff_cmd (left_path, right_path, merged_path, lfile, rfile, outfile) elseif program_exists_in_path ("TortoiseMerge") then cmd = merge2_tortoise_cmd(lfile, rfile, outfile) elseif string.find(editor, "emacs") ~= nil or string.find(editor, "gnu") ~= nil then @@ -488,10 +567,21 @@ local editor = os.getenv("EDITOR") if editor ~= nil then editor = string.lower(editor) else editor = "" end - if program_exists_in_path("kdiff3") then + local merge = os.getenv("MTMERGE") + -- TODO: Support for rcsmerge_emacs + if merge ~= nil and string.find(editor, "vim") ~= nil then + if os.getenv ("DISPLAY") ~= nil and program_exists_in_path ("gvim") then + cmd = merge3_rcsmerge_vim_cmd (merge, "gvim", lfile, afile, rfile, outfile) + elseif program_exists_in_path ("vim") then + cmd = merge3_rcsmerge_vim_cmd (merge, "vim", lfile, afile, rfile, outfile) + end + + elseif program_exists_in_path("kdiff3") then cmd = merge3_kdiff3_cmd (left_path, anc_path, right_path, merged_path, lfile, afile, rfile, outfile) elseif program_exists_in_path ("xxdiff") then cmd = merge3_xxdiff_cmd (left_path, anc_path, right_path, merged_path, lfile, afile, rfile, outfile) + elseif program_exists_in_path ("opendiff") then + cmd = merge3_opendiff_cmd (left_path, anc_path, right_path, merged_path, lfile, afile, rfile, outfile) elseif program_exists_in_path ("TortoiseMerge") then cmd = merge3_tortoise_cmd(lfile, afile, rfile, outfile) elseif string.find(editor, "emacs") ~= nil or string.find(editor, "gnu") ~= nil then ======================================================================== --- tests/t_add_dot.at f7f04114039217d33e5b589f8daaf926aed40a03 +++ tests/t_add_dot.at 70227719dce0b158824f846a8f7a529a7f85dced @@ -13,13 +13,13 @@ AT_DATA(subdir/testdir1/subfile2, [quux ]) -AT_CHECK(MONOTONE setup subdir, [], [ignore], [ignore]) +AT_CHECK(MONOTONE setup --branch=testbranch subdir, [], [ignore], [ignore]) # Make sure that "add ." works, even at the root of the tree AT_CHECK(cd subdir && MONOTONE add ., [], [ignore], [ignore]) # Make sure that it took -AT_CHECK(cd subdir && MONOTONE commit --message="foo" --branch=testbranch, [], [ignore], [ignore]) +AT_CHECK(cd subdir && MONOTONE commit --message="foo", [], [ignore], [ignore]) AT_CHECK(rm subdir/testfile1) AT_CHECK(rm subdir/testfile2) ======================================================================== --- tests/t_add_edge.at 11b5bb7be4a2dbe66cd94999b1ec9fd1c34f5b30 +++ tests/t_add_edge.at d0c5635df674fdc6c33d5d66a0e144398e995b04 @@ -32,7 +32,7 @@ MERGED=`BASE_REVISION` -AT_CHECK(MONOTONE cat revision $MERGED, [], [stdout]) +AT_CHECK(MONOTONE automate get_revision $MERGED, [], [stdout]) AT_CHECK(mv stdout rev) AT_CHECK(grep add_file rev, [1], [ignore]) ======================================================================== --- tests/t_add_stomp_file.at 5bbd2eb4c43a8400477107da7c242e63596650b3 +++ tests/t_add_stomp_file.at 1e74d89b26c8f9b81662ecda31737f65e9f97223 @@ -26,16 +26,16 @@ AT_CHECK(mkdir alicewd) AT_CHECK(cp initial alicewd/initial) AT_CHECK(MONOTONE --branch=testbranch setup alicewd, [], [ignore], [ignore]) -AT_CHECK( (cd alicewd; MONOTONE --branch=testbranch --root=. add initial), [], [ignore], [ignore]) +AT_CHECK( (cd alicewd; MONOTONE --root=. add initial), [], [ignore], [ignore]) AT_CHECK( (cd alicewd; MONOTONE --branch=testbranch --root=. commit -m 'initial commit'), [], [ignore], [ignore]) AT_CHECK(cp foo.alice alicewd/foo) # Bob does add of file foo, and commits AT_CHECK(MONOTONE --branch=testbranch checkout bobwd, [], [ignore], [ignore]) AT_CHECK(cp foo.bob bobwd/foo) -AT_CHECK( (cd bobwd; MONOTONE --branch=testbranch --root=. add foo), [], [ignore], [ignore]) +AT_CHECK( (cd bobwd; MONOTONE --root=. add foo), [], [ignore], [ignore]) AT_CHECK( (cd bobwd; MONOTONE --branch=testbranch --root=. commit -m 'bob commit'), [], [ignore], [ignore]) -REV=`BASE_REVISION` +REV=`cd bobwd; BASE_REVISION` # Alice does her update, discovers foo has been stomped! AT_CHECK( (cd alicewd; MONOTONE --branch=testbranch --root=. update --revision=$REV), [], [ignore], [ignore]) ======================================================================== --- tests/t_add_vs_commit.at 92280abe24d27ced1ce60d8b8e87efc310be4550 +++ tests/t_add_vs_commit.at de9cf601f5c2c74d2432eb4fc0531d7a572cd673 @@ -1,14 +1,9 @@ AT_SETUP([add working copy commit in another]) MONOTONE_SETUP -# This test is a bug report -AT_XFAIL_IF(true) - # 1. Alice writes a file, does an add, *doesn't* do a commit, and sends patch # 2. Bob applies (modified) patch to tree, does the add, then a commit. # 3. Now Alice does an update (resolves the merge conflict, choosing Bob's changes). -# -# Alice's working dir now give I()'s when she tries to do stuff (diff, update, etc.). AT_DATA(initial, [some initial data ]) @@ -38,7 +33,7 @@ AT_CHECK(cp foo.bob bobwd/foo) AT_CHECK( (cd bobwd; MONOTONE --root=. add foo), [], [ignore], [ignore]) AT_CHECK( (cd bobwd; MONOTONE --root=. commit -m 'bob commit'), [], [ignore], [ignore]) -REV=`BASE_REVISION` +REV=`cd bobwd; BASE_REVISION` # Alice does her update, then attempts, eg., a diff AT_CHECK( (cd alicewd; MONOTONE --root=. update --revision=$REV), [], [ignore], [ignore]) ======================================================================== --- tests/t_annotate_branch_collision.at 9109836cbf4011c18f3f9645894c2b72acd5690b +++ tests/t_annotate_branch_collision.at 261f44d7235b02fd6e7cdcbae76866f5ab60ff81 @@ -26,7 +26,7 @@ REVL=`BASE_REVISION` AT_CHECK(rm -r -f MT foo) -AT_CHECK(MONOTONE setup .) +AT_CHECK(MONOTONE setup --branch=testbranch .) AT_CHECK(cp foo.right foo) AT_CHECK(MONOTONE add foo, [], [ignore], [ignore]) ======================================================================== --- tests/t_attributes.at 0375bcb4411006f5b6c0e6a72b92b568ace844f5 +++ tests/t_attributes.at f9a21f085de7224b35dd7df5c1ea1ce8ae6746c2 @@ -30,13 +30,13 @@ UPDATE_R_SHA1=`BASE_REVISION` # Check checkouts. -AT_CHECK(rm -rf co-dir/MT) +AT_CHECK(rm -rf co-dir) AT_CHECK(MONOTONE checkout --revision=$CO_R_SHA1 co-dir, [], [stdout]) AT_CHECK(grep "test_attr:foo:true" stdout, [], [ignore]) AT_CHECK(grep "test_attr:a:1" stdout, [], [ignore]) # Check updates. -AT_CHECK(rm -rf co-dir/MT) +AT_CHECK(rm -rf co-dir) AT_CHECK(MONOTONE checkout --revision=$UPDATE_R_SHA1 co-dir, [], [stdout]) AT_CHECK(grep "test_attr:foo" stdout, [1], [ignore]) AT_CHECK(grep "test_attr:a:2" stdout, [], [ignore]) ======================================================================== --- tests/t_automate_get_file.at +++ tests/t_automate_get_file.at 57d34789ad2ede0a5233cdc4f06d0674bb2f3816 @@ -0,0 +1,35 @@ +# -*- Autoconf -*- + +AT_SETUP([automate get_file]) +NEED_UNB64 +MONOTONE_SETUP + +AT_DATA(expected, [blah +]) + +AT_DATA(empty, []) + +ADD_FILE(foo, [blah +]) +AT_CHECK(MONOTONE commit --date=2005-05-21T12:30:51 --branch=testbranch --message=blah-blah, [], [ignore], [ignore]) +BASE_R=`BASE_REVISION` +FILE_R=4cbd040533a2f43fc6691d773d510cda70f4126a + +# check that a correct usage produces correctly formatted output +AT_CHECK(MONOTONE automate get_file $FILE_R, [], [stdout], [ignore]) +AT_CHECK(CANONICALISE(stdout)) +AT_CHECK(cmp expected stdout) + +# ensure that missing revisions fail +NOSUCHREV=0000000000000000000000000000000000000000 +AT_CHECK(MONOTONE automate get_file $NOSUCHREV, [1], [stdout], [ignore]) +AT_CHECK(CANONICALISE(stdout)) +AT_CHECK(cmp empty stdout) + +# ensure that revisions are not being completed +TRUNCATEDREV=4cbd040533a2f43fc6691d773d510c +AT_CHECK(MONOTONE automate get_file $TRUNCATEDREV, [1], [stdout], [ignore]) +AT_CHECK(CANONICALISE(stdout)) +AT_CHECK(cmp empty stdout) + +AT_CLEANUP ======================================================================== --- tests/t_automate_get_manifest.at +++ tests/t_automate_get_manifest.at 58ea47a574d79d2409180521b88dd7a311eb918e @@ -0,0 +1,41 @@ +# -*- Autoconf -*- + +AT_SETUP([automate get_manifest]) +NEED_UNB64 +MONOTONE_SETUP + +AT_DATA(expected, [4cbd040533a2f43fc6691d773d510cda70f4126a foo +]) + +AT_DATA(empty, []) + +ADD_FILE(foo, [blah +]) +AT_CHECK(MONOTONE commit --date=2005-05-21T12:30:51 --branch=testbranch --message=blah-blah, [], [ignore], [ignore]) +BASE_R=`BASE_REVISION` +MANIFEST_R=095e136cd6e47e3519869fb0f07dcce183780b6e + +# check that a correct usage produces correctly formatted output +AT_CHECK(MONOTONE automate get_manifest $MANIFEST_R, [], [stdout], [ignore]) +AT_CHECK(CANONICALISE(stdout)) +AT_CHECK(cmp expected stdout) + +# should work even if we don't specify the manifest ID +AT_CHECK(MONOTONE automate get_manifest, [], [stdout], [ignore]) +AT_CHECK(CANONICALISE(stdout)) +AT_CHECK(cmp expected stdout) + +# ensure that missing revisions fail +NOSUCHREV=0000000000000000000000000000000000000000 +AT_CHECK(MONOTONE automate get_file $NOSUCHREV, [1], [stdout], [ignore]) +AT_CHECK(CANONICALISE(stdout)) +AT_CHECK(cmp empty stdout) + +# ensure that revisions are not being completed +# (the above commit will have created rev 306c506078df4b58470f75c845ccd11c2ea8cb26) +TRUNCATEDREV=306c506078df4b58470f75c845ccd1 +AT_CHECK(MONOTONE automate get_file $TRUNCATEDREV, [1], [stdout], [ignore]) +AT_CHECK(CANONICALISE(stdout)) +AT_CHECK(cmp empty stdout) + +AT_CLEANUP ======================================================================== --- tests/t_automate_get_revision.at +++ tests/t_automate_get_revision.at 594fa8320e2c194967de5f22386809f5c9f9cc14 @@ -0,0 +1,55 @@ +# -*- Autoconf -*- + +AT_SETUP([automate get_manifest]) +NEED_UNB64 +MONOTONE_SETUP + +AT_DATA(expected, [new_manifest @<:@095e136cd6e47e3519869fb0f07dcce183780b6e@:>@ + +old_revision @<:@@:>@ +old_manifest @<:@@:>@ + +add_file "foo" + +patch "foo" + from @<:@@:>@ + to @<:@4cbd040533a2f43fc6691d773d510cda70f4126a@:>@ +]) + +AT_DATA(expected2, [new_manifest @<:@095e136cd6e47e3519869fb0f07dcce183780b6e@:>@ + +old_revision @<:@306c506078df4b58470f75c845ccd11c2ea8cb26@:>@ +old_manifest @<:@095e136cd6e47e3519869fb0f07dcce183780b6e@:>@ +]) + +AT_DATA(empty, []) + +ADD_FILE(foo, [blah +]) +AT_CHECK(MONOTONE commit --date=2005-05-21T12:30:51 --branch=testbranch --message=blah-blah, [], [ignore], [ignore]) +BASE_R=`BASE_REVISION` + +# check that a correct usage produces correctly formatted output +AT_CHECK(MONOTONE automate get_revision $BASE_R, [], [stdout], [ignore]) +AT_CHECK(CANONICALISE(stdout)) +AT_CHECK(cmp expected stdout) + +# should work even if we don't specify the revision +AT_CHECK(MONOTONE automate get_revision, [], [stdout], [ignore]) +AT_CHECK(CANONICALISE(stdout)) +AT_CHECK(cmp expected2 stdout) + +# ensure that missing revisions fail +NOSUCHREV=0000000000000000000000000000000000000000 +AT_CHECK(MONOTONE automate get_file $NOSUCHREV, [1], [stdout], [ignore]) +AT_CHECK(CANONICALISE(stdout)) +AT_CHECK(cmp empty stdout) + +# ensure that revisions are not being completed +# (the above commit will have created rev 306c506078df4b58470f75c845ccd11c2ea8cb26) +TRUNCATEDREV=095e136cd6e47e3519869fb0f07dcc +AT_CHECK(MONOTONE automate get_file $TRUNCATEDREV, [1], [stdout], [ignore]) +AT_CHECK(CANONICALISE(stdout)) +AT_CHECK(cmp empty stdout) + +AT_CLEANUP ======================================================================== --- tests/t_cat_file_by_name.at 45f9704b56b2b74f16c5579539bc1c6f777b1e56 +++ tests/t_cat_file_by_name.at a8bd5077ca1e36b9ce1082c3b844603afdfea3ea @@ -1,4 +1,4 @@ -AT_SETUP([cat file REV PATH]) +AT_SETUP([cat -r REV PATH]) MONOTONE_SETUP AT_DATA(r0testfile, [r0 test file @@ -22,25 +22,25 @@ COMMIT(testbranch) R1=`BASE_REVISION` -AT_CHECK(MONOTONE cat file $R0 testfile, [], [stdout], [ignore]) +AT_CHECK(MONOTONE cat -r $R0 testfile, [], [stdout], [ignore]) AT_CHECK(CANONICALISE(stdout)) AT_CHECK(cmp stdout r0testfile, [], [ignore]) -AT_CHECK(MONOTONE cat file $R0 otherfile, [], [stdout], [ignore]) +AT_CHECK(MONOTONE cat -r $R0 otherfile, [], [stdout], [ignore]) AT_CHECK(CANONICALISE(stdout)) AT_CHECK(cmp stdout r0otherfile, [], [ignore]) -AT_CHECK(MONOTONE cat file $R1 testfile, [], [stdout], [ignore]) +AT_CHECK(MONOTONE cat -r $R1 testfile, [], [stdout], [ignore]) AT_CHECK(CANONICALISE(stdout)) AT_CHECK(cmp stdout r1testfile, [], [ignore]) -CHECK_SAME_CANONICALISED_STDOUT(cd subdir && MONOTONE cat file $R0 testfile, cat subfile) +CHECK_SAME_CANONICALISED_STDOUT(cd subdir && MONOTONE cat -r $R0 testfile, cat subfile) AT_CHECK(rm -rf MT) -CHECK_SAME_CANONICALISED_STDOUT(MONOTONE cat file $R0 testfile, cat r0testfile) +CHECK_SAME_CANONICALISED_STDOUT(MONOTONE cat -r $R0 testfile, cat r0testfile) -AT_CHECK(MONOTONE cat file $R0 no_such_file, [1], [ignore], [ignore]) -AT_CHECK(MONOTONE cat file $R0 "", [1], [ignore], [ignore]) +AT_CHECK(MONOTONE cat -r $R0 no_such_file, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE cat -r $R0 "", [1], [ignore], [ignore]) AT_CLEANUP ======================================================================== --- tests/t_change_empty_file.at 207dd154775a8ff419370bbfd7099f118618010f +++ tests/t_change_empty_file.at 692dcb0629167d5f44981d62347bfb14b50ef9a6 @@ -27,7 +27,7 @@ from @<:@da39a3ee5e6b4b0d3255bfef95601890afd80709@:>@ to @<:@b0d699dae7df285e64265ec6b46538b0ce785da0@:>@ ]) -AT_CHECK(MONOTONE cat revision c1dc9e4d249ac7a5f6143a87a1e90246d8be0ee5, +AT_CHECK(MONOTONE automate get_revision c1dc9e4d249ac7a5f6143a87a1e90246d8be0ee5, [], [stdout], [ignore]) AT_CHECK(CANONICALISE(stdout)) AT_CHECK(cmp stdout expout, [], [ignore]) ======================================================================== --- tests/t_commit_message_file.at aa49a6a98a40d510813800cd39cf9ae399bef4ed +++ tests/t_commit_message_file.at 447a09a7a56815e3298f30a6c84a89882340c029 @@ -25,7 +25,7 @@ #-------------------- #also with a file coming outside the working copy #-------------------- -AT_CHECK(MONOTONE setup alt_wrk, [], [ignore], [ignore]) +AT_CHECK(MONOTONE setup --branch=testbranch alt_wrk, [], [ignore], [ignore]) AT_DATA(alt_wrk/input1.txt, [files... files... ]) ======================================================================== --- tests/t_cvsimport.at a212a3cbc77e3bd78bb0bf4aea478769c93dc6d6 +++ tests/t_cvsimport.at cdb0a29f99f219dd5c2f4ebb2f3da47003ca10d7 @@ -50,10 +50,10 @@ # repo to cvs_import instead of just a module. AT_CHECK(MONOTONE --branch=testbranch cvs_import $CVSROOT, [1], [ignore], [ignore]) AT_CHECK(MONOTONE --branch=testbranch cvs_import $CVSROOT/testdir, [], [ignore], [ignore]) -AT_CHECK(MONOTONE cat file $TSHA0, [], [ignore]) -AT_CHECK(MONOTONE cat file $TSHA1, [], [ignore]) -AT_CHECK(MONOTONE cat file $TSHA2, [], [ignore]) -AT_CHECK(MONOTONE cat file $TSHA3, [], [ignore]) +AT_CHECK(MONOTONE automate get_file $TSHA0, [], [ignore]) +AT_CHECK(MONOTONE automate get_file $TSHA1, [], [ignore]) +AT_CHECK(MONOTONE automate get_file $TSHA2, [], [ignore]) +AT_CHECK(MONOTONE automate get_file $TSHA3, [], [ignore]) # also check that history is okay -- has a unique head, and it's the # right one. ======================================================================== --- tests/t_cvsimport_deleted_invar.at 4ee87dff9e284fdf7abf6ca72616c55b32f39a3d +++ tests/t_cvsimport_deleted_invar.at f6cef14b364d39403eaf99f2a18ad255047f4ca7 @@ -28,9 +28,9 @@ AT_CHECK(MONOTONE --branch=testbranch cvs_import $CVSROOT/attest, [], [ignore], [ignore]) -AT_CHECK(MONOTONE cat file $TSHA0, [], [ignore]) -AT_CHECK(MONOTONE cat file $TSHA1, [], [ignore]) -AT_CHECK(MONOTONE cat file $TSHA2, [], [ignore]) +AT_CHECK(MONOTONE automate get_file $TSHA0, [], [ignore]) +AT_CHECK(MONOTONE automate get_file $TSHA1, [], [ignore]) +AT_CHECK(MONOTONE automate get_file $TSHA2, [], [ignore]) AT_CLEANUP ======================================================================== --- tests/t_cvsimport_drepper.at 5b803327cc8752bab50ced9a0efc4ce59a5244ef +++ tests/t_cvsimport_drepper.at 99b2dc609f08a0dfa0649226a11951534ce6c743 @@ -185,7 +185,7 @@ AT_CHECK(MONOTONE --branch=foo.bar cvs_import e, [], [ignore], [ignore]) AT_CHECK(MONOTONE --branch=foo.bar.disasm-branch co) -AT_CHECK(cd foo.bar.disasm-branch && MONOTONE cat manifest, [], [stdout]) +AT_CHECK(cd foo.bar.disasm-branch && MONOTONE automate get_manifest, [], [stdout]) AT_CHECK(CANONICALISE(stdout)) AT_CHECK(cmp test.manifest stdout) ======================================================================== --- tests/t_cvsimport_drepper2.at 530e44ff587e4ad3ce3ca95026f1990f505c8e5e +++ tests/t_cvsimport_drepper2.at 6cbbd86a7d4476646de2b9db9a6bbaf199296701 @@ -66,7 +66,7 @@ AT_CHECK(MONOTONE --branch=foo.bar cvs_import e, [], [ignore], [ignore]) AT_CHECK(MONOTONE --branch=foo.bar co) -AT_CHECK(cd foo.bar && MONOTONE cat manifest, [], [stdout]) +AT_CHECK(cd foo.bar && MONOTONE automate get_manifest, [], [stdout]) AT_CHECK(CANONICALISE(stdout)) AT_CHECK(cmp test.manifest stdout) AT_CHECK(cd foo.bar && MONOTONE list tags, [], [stdout]) ======================================================================== --- tests/t_cvsimport_manifest_cycle.at 57d28d7204339cc9645554b6e5d47fd8128c46c7 +++ tests/t_cvsimport_manifest_cycle.at 690f76368733c0e909bde2a46f8edea144f7569b @@ -28,7 +28,7 @@ AT_CHECK(MONOTONE --branch=testbranch cvs_import $CVSROOT/attest, [], [ignore], [ignore]) -AT_CHECK(MONOTONE cat file $TSHA0, [], [ignore]) +AT_CHECK(MONOTONE automate get_file $TSHA0, [], [ignore]) AT_CLEANUP ======================================================================== --- tests/t_cvsimport_samelog.at e7c5ee56f45b0da54ace0fb9282c19604104610d +++ tests/t_cvsimport_samelog.at ccac785c1ac8421e23723f4cdd9e69ce10be7e93 @@ -47,10 +47,10 @@ # import into monotone and check presence of files AT_CHECK(MONOTONE --branch=testbranch cvs_import $CVSROOT/testdir, [], [ignore], [ignore]) -AT_CHECK(MONOTONE cat file $TSHA0, [], [ignore]) -AT_CHECK(MONOTONE cat file $TSHA1, [], [ignore]) -AT_CHECK(MONOTONE cat file $TSHA2, [], [ignore]) -AT_CHECK(MONOTONE cat file $TSHA3, [], [ignore]) +AT_CHECK(MONOTONE automate get_file $TSHA0, [], [ignore]) +AT_CHECK(MONOTONE automate get_file $TSHA1, [], [ignore]) +AT_CHECK(MONOTONE automate get_file $TSHA2, [], [ignore]) +AT_CHECK(MONOTONE automate get_file $TSHA3, [], [ignore]) # also check that history is okay -- has a unique head, and it's the # right one. ======================================================================== --- tests/t_database_check.at 208a81e56219fc72a6db6330841255baab90824b +++ tests/t_database_check.at 7cd1598d68805979e7b435a58dede713dc38ad25 @@ -41,7 +41,7 @@ AT_CHECK(MONOTONE add file1, [], [ignore], [ignore]) AT_CHECK(MONOTONE commit --branch=test --message='add file1', [], [ignore], [ignore]) REV1=`BASE_REVISION` -MAN1=`monotone --norc cat manifest | monotone --norc identify` +MAN1=`monotone --norc automate get_manifest | monotone --norc identify` AT_CHECK(MONOTONE add file2, [], [ignore], [ignore]) AT_CHECK(MONOTONE commit --branch=test --message='add file2', [], [ignore], [ignore]) ======================================================================== --- tests/t_db_kill_rev_locally.at a5043ae56c1d9ab1897594010d21b5e0851e572c +++ tests/t_db_kill_rev_locally.at dba54fa06f40b817e7123cd375b78b96f62a4d43 @@ -16,13 +16,13 @@ # trying to kill the ancestor. This *is supposed to fail* AT_CHECK(MONOTONE db kill_rev_locally $ANCESTOR, [1], [ignore], [ignore]) -AT_CHECK(MONOTONE cat revision $ANCESTOR, [], [ignore], [ignore]) +AT_CHECK(MONOTONE automate get_revision $ANCESTOR, [], [ignore], [ignore]) AT_CHECK(MONOTONE db check, [], [ignore], [ignore]) # killing children is ok, though :) -AT_CHECK(MONOTONE cat revision $CHILD, [], [ignore], [ignore]) +AT_CHECK(MONOTONE automate get_revision $CHILD, [], [ignore], [ignore]) AT_CHECK(MONOTONE db kill_rev_locally $CHILD, [], [ignore], [ignore]) -AT_CHECK(MONOTONE cat revision $CHILD, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE automate get_revision $CHILD, [1], [ignore], [ignore]) AT_CHECK(MONOTONE db check, [], ignore, ignore) AT_CLEANUP ======================================================================== --- tests/t_db_with_dots.at 0d250a8d8d44ce0a4edd501284c2d1875df03be3 +++ tests/t_db_with_dots.at 69973200a20d087bb2701a5c5e8c927ae54e53d2 @@ -8,7 +8,7 @@ # paths in MT/options should be absolute and not contain .. AT_CHECK(mkdir bar) -AT_CHECK( (cd bar && MONOTONE --db=../new.db setup .), [], [ignore], [ignore]) +AT_CHECK( (cd bar && MONOTONE --db=../new.db --branch=testbranch setup .), [], [ignore], [ignore]) AT_CHECK(grep new.db bar/MT/options, [], [ignore], [ignore]) AT_CHECK(grep new.db bar/MT/options | grep -v '\.\.', [], [ignore], [ignore]) ======================================================================== --- tests/t_empty_id_completion.at e44949007099f908f22a84276bf5e9d1ae85cf74 +++ tests/t_empty_id_completion.at d7e0f49748fa33fcfa33f847b82308a84d1965bd @@ -1,10 +1,7 @@ AT_SETUP([empty id completion]) MONOTONE_SETUP # regression test: completing the revision "" doesn't crash -AT_CHECK(MONOTONE cat revision "", [1], [ignore], [ignore]) -# might as well check the others... -AT_CHECK(MONOTONE cat manifest "", [1], [ignore], [ignore]) -AT_CHECK(MONOTONE cat file "", [1], [ignore], [ignore]) +AT_CHECK(MONOTONE cat -r "" nosuchfile, [1], [ignore], [ignore]) AT_CLEANUP ======================================================================== --- tests/t_empty_path.at c3c5137146a20ad3dd354795f69b8732822f5753 +++ tests/t_empty_path.at 69085e1806dff5b9884401f0c64e02477f5a8b14 @@ -7,7 +7,7 @@ REV0=`BASE_REVISION` AT_CHECK(mkdir foo) -AT_CHECK(cd foo && MONOTONE setup "", [1], [ignore], [ignore]) +AT_CHECK(cd foo && MONOTONE setup --branch=testbranch "", [1], [ignore], [ignore]) AT_CHECK(cd foo && MONOTONE checkout --revision=$REV0 "", [1], [ignore], [ignore]) AT_CHECK(cd foo && MONOTONE checkout --branch=testbranch "", [1], [ignore], [ignore]) ======================================================================== --- tests/t_epoch.at 532fcc6bba04a62754b4bb1d6f1e3dda9c463c9f +++ tests/t_epoch.at f49f3179bd8a59fb961258f995af2b460afb4de4 @@ -55,8 +55,8 @@ # double-check that the revisions didn't change (because otherwise our # next test is unreliable): -AT_CHECK(MONOTONE cat revision $VER1, [], [ignore], [ignore]) +AT_CHECK(MONOTONE automate get_revision $VER1, [], [ignore], [ignore]) # confirm, we did not get the new revision -AT_CHECK(MONOTONE2 cat revision $VER1, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $VER1, [1], [ignore], [ignore]) AT_CLEANUP ======================================================================== --- tests/t_epoch_server.at cf758cee3e08a84d727df1b43815cc30737d4190 +++ tests/t_epoch_server.at 13e3ea41bf04d84ccfc2dcf5b6e4d6d6319c6241 @@ -56,8 +56,8 @@ # double-check that the revisions didn't change (because otherwise our # next test is unreliable): -AT_CHECK(MONOTONE2 cat revision $VER1, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $VER1, [], [ignore], [ignore]) # confirm, we did not get the new revision -AT_CHECK(MONOTONE cat revision $VER1, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE automate get_revision $VER1, [1], [ignore], [ignore]) AT_CLEANUP ======================================================================== --- tests/t_epoch_unidirectional.at 5b50d219fc0b011f307d074ab09336f98c121c65 +++ tests/t_epoch_unidirectional.at 8a53bc343a7e48d20843b89a6e77c208de84c38c @@ -11,7 +11,7 @@ COMMIT(testbranch) AT_CHECK(rm -rf MT) -AT_CHECK(MONOTONE2 setup .) +AT_CHECK(MONOTONE2 setup --branch=testbranch .) AT_DATA(otherfile, [some data ]) AT_CHECK(MONOTONE2 add testfile, [], [ignore], [ignore]) ======================================================================== --- tests/t_erename.at 3bcc3d449a1759322fc3b24971d462bb57ad4b25 +++ tests/t_erename.at ef285c34d12c67627b9b6dee00c3957dbe46be12 @@ -42,7 +42,7 @@ # merge the add and the rename AT_CHECK(MONOTONE merge, [], [ignore], [ignore]) AT_CHECK(MONOTONE update, [], [ignore], [ignore]) -AT_CHECK(MONOTONE cat manifest, [ignore], [stdout]) +AT_CHECK(MONOTONE automate get_manifest, [ignore], [stdout]) AT_CHECK(mv stdout manifest) AT_CHECK(grep bar manifest, [0], [ignore], [ignore]) AT_CHECK(grep bleh manifest, [0], [ignore], [ignore]) ======================================================================== --- tests/t_existsonpath.at fc7253fa711c37e25ffdd8e0aa90a631286926f5 +++ tests/t_existsonpath.at 4f555bc7a0c0f3d218a445d3fb78cdcf57147345 @@ -15,7 +15,7 @@ return false end ]) -AT_CHECK(MONOTONE setup --rcfile=test.lua subdir, [], [stdout], [ignore]) +AT_CHECK(MONOTONE setup --rcfile=test.lua --branch=testbranch subdir, [], [stdout], [ignore]) AT_CHECK(QGREP(asdfghjkl stdout), []) AT_CHECK(QGREP(qwertyuiop stdout), []) ======================================================================== --- tests/t_i18n_file.at d2d853d11983314f03ef8703f42f3a8c95d7cde6 +++ tests/t_i18n_file.at a788a76de1663a1ec1b9ef8d571763ed618f2b88 @@ -43,7 +43,7 @@ export LANG=en_US.UTF-8 export CHARSET=UTF-8 -AT_CHECK(MONOTONE cat manifest, [], [stdout]) +AT_CHECK(MONOTONE automate get_manifest, [], [stdout]) AT_CHECK(mv stdout manifest) AT_CHECK(grep funny manifest, [], [ignore], [ignore]) AT_CHECK(grep spaces manifest, [], [ignore], [ignore]) @@ -74,7 +74,7 @@ # check the names showed up in our manifest -AT_CHECK(MONOTONE cat manifest, [], [stdout]) +AT_CHECK(MONOTONE automate get_manifest, [], [stdout]) AT_CHECK(mv stdout manifest) AT_CHECK(grep funny manifest, [], [ignore], [ignore]) AT_CHECK(grep spaces manifest, [], [ignore], [ignore]) @@ -101,7 +101,7 @@ # check the names showed up in our manifest -AT_CHECK(MONOTONE cat manifest, [], [stdout]) +AT_CHECK(MONOTONE automate get_manifest, [], [stdout]) AT_CHECK(mv stdout manifest) AT_CHECK(grep funny manifest, [], [ignore], [ignore]) AT_CHECK(grep spaces manifest, [], [ignore], [ignore]) ======================================================================== --- tests/t_import.at fdb19cf2022139b6c5beb598d138a5e9798cb23f +++ tests/t_import.at acd29dd84259e7d8d08e79c2567a66b78928c430 @@ -12,7 +12,7 @@ AT_CHECK(MONOTONE add importme, [], [ignore], [ignore]) AT_CHECK(MONOTONE --branch=testbranch commit --message='blah blah', [], [ignore], [ignore]) -AT_CHECK(MONOTONE cat file $TSHA, [], [stdout]) +AT_CHECK(MONOTONE automate get_file $TSHA, [], [stdout]) AT_CHECK(CANONICALISE(stdout)) AT_CHECK(cmp importme stdout, [], [ignore]) ======================================================================== --- tests/t_inodeprints_hook.at eb998935bdbf72c58d8811a635c4609680e450c1 +++ tests/t_inodeprints_hook.at 9ba633b9cd6acf2c4c7630336f4f9755e14a86ef @@ -19,17 +19,17 @@ COMMIT(testbranch) REV=`BASE_REVISION` -AT_CHECK(MONOTONE setup setup_default, [], [ignore], [ignore]) +AT_CHECK(MONOTONE setup --branch=testbranch setup_default, [], [ignore], [ignore]) AT_CHECK(test ! -e setup_default/MT/inodeprints) AT_CHECK(MONOTONE checkout --revision=$REV co_default, [], [ignore], [ignore]) AT_CHECK(test ! -e co_default/MT/inodeprints) -AT_CHECK(MONOTONE --rcfile=off.lua setup setup_off, [], [ignore], [ignore]) +AT_CHECK(MONOTONE --rcfile=off.lua setup --branch=testbranch setup_off, [], [ignore], [ignore]) AT_CHECK(test ! -e setup_off/MT/inodeprints) AT_CHECK(MONOTONE --rcfile=off.lua checkout --revision=$REV co_off, [], [ignore], [ignore]) AT_CHECK(test ! -e co_off/MT/inodeprints) -AT_CHECK(MONOTONE --rcfile=on.lua setup setup_on, [], [ignore], [ignore]) +AT_CHECK(MONOTONE --rcfile=on.lua setup --branch=testbranch setup_on, [], [ignore], [ignore]) AT_CHECK(test -e setup_on/MT/inodeprints) AT_CHECK(MONOTONE --rcfile=on.lua checkout --revision=$REV co_on, [], [ignore], [ignore]) AT_CHECK(test -e co_on/MT/inodeprints) ======================================================================== --- tests/t_lua_includedir.at 06e756a957d1d330d347970c0c32def0936c7702 +++ tests/t_lua_includedir.at cfb180197cc358a2d4bf71385fa0fdc1b53058ed @@ -22,7 +22,7 @@ ]) # setup a wrk dir -AT_CHECK(MONOTONE setup alt_wrk, [], [ignore], [ignore]) +AT_CHECK(MONOTONE setup --branch=testbranch alt_wrk, [], [ignore], [ignore]) # include directly a single file AT_CHECK(cd alt_wrk && MONOTONE --root=. --rcfile=../include.lua status, [], [stdout], [ignore]) @@ -32,7 +32,7 @@ AT_CHECK(cd alt_wrk && MONOTONE --root=. --rcfile=../includedir.lua status, [], [stdout], [ignore]) AT_CHECK(QGREP("BOOGA BOOGACICCA CICCA" stdout)) -# write a third file: should be read beetween the two previous ones +# write a third file: should be read between the two previous ones AT_DATA(gongolo/aba.rc, [function notwowithoutthree() io.write("hu hu") end ======================================================================== --- tests/t_merge2_add.at a36d4d07a745cfbbf45ef17be18bdc0b55b77c42 +++ tests/t_merge2_add.at 5bd5c17172e802ab24a998462fd0dc1738b0716a @@ -7,7 +7,7 @@ LEFT=`BASE_REVISION` AT_CHECK(rm -rf MT) -AT_CHECK(MONOTONE setup .) +AT_CHECK(MONOTONE setup --branch=testbranch .) ADD_FILE(testfile2, [This is test file 2 ]) ======================================================================== --- tests/t_merge2_data.at 4325798fac860cb6563fc1de63d1570d16a2fa1e +++ tests/t_merge2_data.at 198ef24b2d4ec9dfa4ba2328c403a832c7cfa4c2 @@ -18,7 +18,7 @@ LEFT=`BASE_REVISION` AT_CHECK(rm -rf MT) -AT_CHECK(MONOTONE setup .) +AT_CHECK(MONOTONE setup --branch=testbranch .) AT_CHECK(cp -f right testfile) AT_CHECK(MONOTONE add testfile, [], [ignore], [ignore]) ======================================================================== --- tests/t_merge_add_del.at 20f850e8ede0f7c4240c1f9cb21855f151f89df2 +++ tests/t_merge_add_del.at 14ee39bb126bd3469017d27f471434e4429a33f9 @@ -76,7 +76,7 @@ AT_CHECK(rm -rf MT) AT_CHECK(MONOTONE --branch=branch.fork checkout .) -AT_CHECK(MONOTONE cat manifest, [], [stdout]) +AT_CHECK(MONOTONE automate get_manifest, [], [stdout]) AT_CHECK(mv stdout manifest) AT_CHECK(grep bar manifest, [1], [ignore], [ignore]) AT_CHECK(grep quux manifest, [0], [ignore], [ignore]) ======================================================================== --- tests/t_movedel.at b0825386b5bb4346194fbb6348d7706a313ee3b8 +++ tests/t_movedel.at a3cf97dca10d5b59aeb7e995f13b2268ef1f4112 @@ -34,7 +34,7 @@ AT_CHECK(MONOTONE update, [], [ignore], [ignore]) # check that the delete landed on the renamed target -AT_CHECK(MONOTONE cat manifest, [], [stdout]) +AT_CHECK(MONOTONE automate get_manifest, [], [stdout]) AT_CHECK(mv stdout manifest) AT_CHECK(grep baz manifest, [0], [ignore], [ignore]) AT_CHECK(grep bar manifest, [1], [ignore], [ignore]) ======================================================================== --- tests/t_movepatch.at 83acbd4252c65f8826dab7107d478626f32243be +++ tests/t_movepatch.at e7ef086e17d1348933f44acc0147cde8774450ca @@ -33,7 +33,7 @@ AT_CHECK(MONOTONE update, [], [ignore], [ignore]) # check that the delta landed on the renamed target -AT_CHECK(MONOTONE cat manifest, [], [stdout]) +AT_CHECK(MONOTONE automate get_manifest, [], [stdout]) AT_CHECK(mv stdout manifest) AT_CHECK(grep bar manifest, [0], [ignore], [ignore]) AT_CHECK(grep foo manifest, [1], [ignore], [ignore]) ======================================================================== --- tests/t_mt_ignore.at +++ tests/t_mt_ignore.at 363081d16393e1244dd4d4347c1c63f19ba54e36 @@ -0,0 +1,32 @@ +AT_SETUP([things in .mt-ignore get ignored]) + +MONOTONE_SETUP + +AT_CHECK(touch foo) +AT_CHECK(touch bar) +AT_CHECK(mkdir baz) +AT_CHECK(touch baz/xyzzy) + +AT_DATA(.mt-ignore, [bar +baz +]) + +AT_CHECK(RAW_MONOTONE ls unknown, [], [stdout], []) +AT_CHECK(cp stdout unknown) + +AT_CHECK(grep foo unknown, [], [ignore]) +AT_CHECK(grep bar unknown, [1], [ignore]) +AT_CHECK(grep baz unknown, [1], [ignore]) + + +AT_CHECK(RAW_MONOTONE ls ignored, [], [stdout], []) +AT_CHECK(cp stdout ignored) + +AT_CHECK(grep foo ignored, [1], [ignore]) +AT_CHECK(grep bar ignored, [], [ignore]) +AT_CHECK(grep xyzzy ignored, [], [ignore]) + +AT_CHECK(rm .mt-ignore) +AT_CHECK(RAW_MONOTONE ls ignored, [], [], []) + +AT_CLEANUP ======================================================================== --- tests/t_netsync.at 49202a1a3045c6f30e90cfcb4672b9df4dc7a772 +++ tests/t_netsync.at 31e8c678b935b657624d1ca98391efc8dbf921ad @@ -37,22 +37,22 @@ AT_CHECK(grep changelog certs, [], [ignore]) AT_CHECK(grep bad certs, [1], [ignore]) -AT_CHECK(MONOTONE2 cat revision $VER0, [], [stdout]) +AT_CHECK(MONOTONE2 automate get_revision $VER0, [], [stdout]) AT_CHECK(CANONICALISE(stdout)) CHK=`SHA1(stdout)` AT_CHECK(test $CHK = $VER0) -AT_CHECK(MONOTONE2 cat revision $VER1, [], [stdout]) +AT_CHECK(MONOTONE2 automate get_revision $VER1, [], [stdout]) AT_CHECK(CANONICALISE(stdout)) CHK=`SHA1(stdout)` AT_CHECK(test $CHK = $VER1) -AT_CHECK(MONOTONE2 cat file $F_VER0, [], [stdout]) +AT_CHECK(MONOTONE2 automate get_file $F_VER0, [], [stdout]) AT_CHECK(CANONICALISE(stdout)) CHK=`SHA1(stdout)` AT_CHECK(test $CHK = $F_VER0) -AT_CHECK(MONOTONE2 cat file $F_VER1, [], [stdout]) +AT_CHECK(MONOTONE2 automate get_file $F_VER1, [], [stdout]) AT_CHECK(CANONICALISE(stdout)) CHK=`SHA1(stdout)` AT_CHECK(test $CHK = $F_VER1) ======================================================================== --- tests/t_netsync_exclude.at 5a8302a38e8e62edb41b4332822cf82458177d85 +++ tests/t_netsync_exclude.at 92742622e126083db8509144108ae006faed4867 @@ -28,19 +28,19 @@ # pulling everything but them should give revs B1, B2, B3; and only # give branch certs on B1, B3. -NETSYNC_SERVE_START('*' --exclude=branch2 --exclude=branch4) +NETSYNC_SERVE_START('branch*' --exclude=branch2 --exclude=branch4) NETSYNC_CLIENT_RUN(pull, 'branch*') -AT_CHECK(MONOTONE2 cat revision $B1, [1], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $B2, [1], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $B3, [1], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $B4, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B1, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B2, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B3, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B4, [1], [ignore], [ignore]) NETSYNC_CLIENT_RUN(pull, 'branch*' --exclude=branch2 --exclude=branch4) -AT_CHECK(MONOTONE2 cat revision $B1, [], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $B2, [], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $B3, [], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $B4, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B1, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B2, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B3, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B4, [1], [ignore], [ignore]) AT_CHECK(MONOTONE2 ls certs $B2 | QGREP(branch2), [1]) ======================================================================== --- tests/t_netsync_exclude_default.at 11beeeb0a601ba2f06d47c89b228cdfbd3f660f9 +++ tests/t_netsync_exclude_default.at e60e806f5ae6a160048081dccff8ce46c74b8551 @@ -15,8 +15,8 @@ RUN_NETSYNC(pull, 'branch*' --exclude=branch2) -AT_CHECK(MONOTONE2 cat revision $B11, [], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $B21, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B11, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B21, [1], [ignore], [ignore]) REVERT_TO($B11) SET_FILE(testfile, [12 @@ -31,18 +31,18 @@ B22=`BASE_REVISION` RUN_NETSYNC(pull) -AT_CHECK(MONOTONE2 cat revision $B11, [], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $B21, [1], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $B12, [], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $B22, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B11, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B21, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B12, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B22, [1], [ignore], [ignore]) # passing only an include pattern causes the default exclude to be # ignored... RUN_NETSYNC(pull, branch2) -AT_CHECK(MONOTONE2 cat revision $B11, [], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $B21, [], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $B12, [], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $B22, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B11, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B21, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B12, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B22, [], [ignore], [ignore]) # but not set by default @@ -59,22 +59,22 @@ B23=`BASE_REVISION` RUN_NETSYNC(pull) -AT_CHECK(MONOTONE2 cat revision $B11, [], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $B21, [], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $B12, [], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $B22, [], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $B13, [], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $B23, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B11, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B21, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B12, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B22, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B13, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B23, [1], [ignore], [ignore]) # but --set-default overrides RUN_NETSYNC(pull --set-default, 'branch*') -AT_CHECK(MONOTONE2 cat revision $B11, [], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $B21, [], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $B12, [], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $B22, [], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $B13, [], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $B23, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B11, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B21, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B12, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B22, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B13, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B23, [], [ignore], [ignore]) REVERT_TO($B13) SET_FILE(testfile, [14 @@ -89,13 +89,13 @@ B24=`BASE_REVISION` RUN_NETSYNC(pull) -AT_CHECK(MONOTONE2 cat revision $B11, [], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $B21, [], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $B12, [], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $B22, [], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $B13, [], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $B23, [], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $B14, [], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $B24, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B11, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B21, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B12, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B22, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B13, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B23, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B14, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B24, [], [ignore], [ignore]) AT_CLEANUP ======================================================================== --- tests/t_netsync_globs.at 3dff1121e0e6897d4f16ed9141253806e5b65939 +++ tests/t_netsync_globs.at fdc7701de9af5a193798b8a25c745d8d15b62086 @@ -8,32 +8,32 @@ REV11=`BASE_REVISION` AT_CHECK(rm -rf MT) -AT_CHECK(MONOTONE setup .) +AT_CHECK(MONOTONE setup --branch=testbranch .) ADD_FILE(testfile, [bar ]) COMMIT(1branch2) REV12=`BASE_REVISION` AT_CHECK(rm -rf MT) -AT_CHECK(MONOTONE setup .) +AT_CHECK(MONOTONE setup --branch=testbranch .) ADD_FILE(testfile, [baz ]) COMMIT(2branch1) REV21=`BASE_REVISION` -NETSYNC_SERVE_START("*") +NETSYNC_SERVE_START("*branch*") # check a glob NETSYNC_CLIENT_N_RUN(2, pull, "*anch2") -AT_CHECK(MONOTONE2 cat revision $REV12, [], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $REV11, [1], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $REV21, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $REV12, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $REV11, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $REV21, [1], [ignore], [ignore]) # check explicit multiple branches NETSYNC_CLIENT_N_RUN(3, pull, 1branch1 2branch1) -AT_CHECK(MONOTONE3 cat revision $REV12, [1], [ignore], [ignore]) -AT_CHECK(MONOTONE3 cat revision $REV11, [], [ignore], [ignore]) -AT_CHECK(MONOTONE3 cat revision $REV21, [], [ignore], [ignore]) +AT_CHECK(MONOTONE3 automate get_revision $REV12, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE3 automate get_revision $REV11, [], [ignore], [ignore]) +AT_CHECK(MONOTONE3 automate get_revision $REV21, [], [ignore], [ignore]) NETSYNC_SERVE_STOP ======================================================================== --- tests/t_netsync_nocerts.at fb066e2badcad62b3b9dfed65f9267ee54411b39 +++ tests/t_netsync_nocerts.at 5b1e9d87f055a58f2c7d3ee0cfaed2e185469955 @@ -19,9 +19,9 @@ RUN_NETSYNC(pull, testbranch) -CHECK_SAME_STDOUT(MONOTONE cat revision $VER0, MONOTONE2 cat revision $VER0) +CHECK_SAME_STDOUT(MONOTONE automate get_revision $VER0, MONOTONE2 automate get_revision $VER0) CHECK_SAME_STDOUT(MONOTONE ls certs $VER0, MONOTONE2 ls certs $VER0) -CHECK_SAME_STDOUT(MONOTONE cat revision $VER1, MONOTONE2 cat revision $VER1) +CHECK_SAME_STDOUT(MONOTONE automate get_revision $VER1, MONOTONE2 automate get_revision $VER1) CHECK_SAME_STDOUT(MONOTONE ls certs $VER1, MONOTONE2 ls certs $VER1) AT_CLEANUP ======================================================================== --- tests/t_netsync_permissions.at 887e4062ab6faa6283d46f0b8dba342f898a23d0 +++ tests/t_netsync_permissions.at 2b2fdda0e34c5c71bad5451e5acdec7416f54162 @@ -36,19 +36,19 @@ AT_CHECK(cp clean.db test2.db) NETSYNC_CLIENT_RUN(pull --key="", testbranch) -AT_CHECK(MONOTONE2 cat revision $BASE, [0], [stdout], [stderr]) +AT_CHECK(MONOTONE2 automate get_revision $BASE, [0], [stdout], [stderr]) # pull with default key AT_CHECK(cp clean.db test2.db) NETSYNC_CLIENT_RUN(pull, testbranch) -AT_CHECK(MONOTONE2 cat revision $BASE, [0], [stdout], [stderr]) +AT_CHECK(MONOTONE2 automate get_revision $BASE, [0], [stdout], [stderr]) # pull with other key AT_CHECK(cp clean.db test2.db) NETSYNC_CLIENT_RUN(pull --key=$OTHER, testbranch) -AT_CHECK(MONOTONE2 cat revision $BASE, [0], [stdout], [stderr]) +AT_CHECK(MONOTONE2 automate get_revision $BASE, [0], [stdout], [stderr]) # pull with unknown key fails @@ -56,7 +56,7 @@ address@hidden AT_CHECK((echo $UNKNOWN; echo $UNKNOWN) | MONOTONE2 genkey $UNKNOWN, [], [ignore], [ignore]) NETSYNC_CLIENT_RUN(pull --key=$UNKNOWN, testbranch) -AT_CHECK(MONOTONE2 cat revision $BASE, [1], [stdout], [stderr]) +AT_CHECK(MONOTONE2 automate get_revision $BASE, [1], [stdout], [stderr]) # push with default key @@ -89,9 +89,9 @@ NETSYNC_SERVE_STOP -AT_CHECK(MONOTONE cat revision $DEFAULT_REV, [0], [stdout], [stderr]) -AT_CHECK(MONOTONE cat revision $OTHER_REV, [0], [stdout], [stderr]) -AT_CHECK(MONOTONE cat revision $UNKNOWN_REV, [1], [stdout], [stderr]) +AT_CHECK(MONOTONE automate get_revision $DEFAULT_REV, [0], [stdout], [stderr]) +AT_CHECK(MONOTONE automate get_revision $OTHER_REV, [0], [stdout], [stderr]) +AT_CHECK(MONOTONE automate get_revision $UNKNOWN_REV, [1], [stdout], [stderr]) # test with closed security settings @@ -122,19 +122,19 @@ AT_CHECK(cp clean.db test2.db) NETSYNC_CLIENT_RUN(pull --key="", testbranch) -AT_CHECK(MONOTONE2 cat revision $BASE, [1], [stdout], [stderr]) +AT_CHECK(MONOTONE2 automate get_revision $BASE, [1], [stdout], [stderr]) # pull with default key AT_CHECK(cp clean.db test2.db) NETSYNC_CLIENT_RUN(pull, testbranch) -AT_CHECK(MONOTONE2 cat revision $BASE, [0], [stdout], [stderr]) +AT_CHECK(MONOTONE2 automate get_revision $BASE, [0], [stdout], [stderr]) # pull with other key fails AT_CHECK(cp clean.db test2.db) NETSYNC_CLIENT_RUN(pull --key=$OTHER, testbranch) -AT_CHECK(MONOTONE2 cat revision $BASE, [1], [stdout], [stderr]) +AT_CHECK(MONOTONE2 automate get_revision $BASE, [1], [stdout], [stderr]) # pull with unknown key fails @@ -142,7 +142,7 @@ address@hidden AT_CHECK((echo $UNKNOWN; echo $UNKNOWN) | MONOTONE2 genkey $UNKNOWN, [], [ignore], [ignore]) NETSYNC_CLIENT_RUN(pull --key=$UNKNOWN, testbranch) -AT_CHECK(MONOTONE2 cat revision $BASE, [1], [stdout], [stderr]) +AT_CHECK(MONOTONE2 automate get_revision $BASE, [1], [stdout], [stderr]) # push with default key @@ -175,8 +175,8 @@ NETSYNC_SERVE_STOP -AT_CHECK(MONOTONE cat revision $DEFAULT_REV, [0], [stdout], [stderr]) -AT_CHECK(MONOTONE cat revision $OTHER_REV, [1], [stdout], [stderr]) -AT_CHECK(MONOTONE cat revision $UNKNOWN_REV, [1], [stdout], [stderr]) +AT_CHECK(MONOTONE automate get_revision $DEFAULT_REV, [0], [stdout], [stderr]) +AT_CHECK(MONOTONE automate get_revision $OTHER_REV, [1], [stdout], [stderr]) +AT_CHECK(MONOTONE automate get_revision $UNKNOWN_REV, [1], [stdout], [stderr]) AT_CLEANUP ======================================================================== --- tests/t_netsync_read_permissions.at 0550bdeac357f6794dd4849b2f0c0ba05a8c6286 +++ tests/t_netsync_read_permissions.at 123e1ee25ec04d06cf8b221227e1456e38af732e @@ -34,19 +34,19 @@ end ]) -NETSYNC_SERVE_START(--rcfile=limited_permission.at '*') +NETSYNC_SERVE_START(--rcfile=limited_permission.at 'branch*') NETSYNC_CLIENT_RUN(pull, 'branch*') -AT_CHECK(MONOTONE2 cat revision $B1, [1], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $B2, [1], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $B3, [1], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $B4, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B1, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B2, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B3, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B4, [1], [ignore], [ignore]) NETSYNC_CLIENT_RUN(pull, branch1 branch3) -AT_CHECK(MONOTONE2 cat revision $B1, [], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $B2, [], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $B3, [], [ignore], [ignore]) -AT_CHECK(MONOTONE2 cat revision $B4, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B1, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B2, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B3, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $B4, [1], [ignore], [ignore]) AT_CHECK(MONOTONE2 ls certs $B2 | QGREP(branch2), [1]) ======================================================================== --- tests/t_netsync_single.at b3d48b1881c63ccb549d37726ae2d7144a856820 +++ tests/t_netsync_single.at 07187540f12b7fd8cf6ad91b02225c052745a011 @@ -37,12 +37,12 @@ AT_CHECK(grep changelog certs, [], [ignore]) AT_CHECK(grep bad certs, [1], [ignore]) -AT_CHECK(MONOTONE --db=test2.db cat revision $VER0, [], [stdout]) +AT_CHECK(MONOTONE --db=test2.db automate get_revision $VER0, [], [stdout]) AT_CHECK(CANONICALISE(stdout)) CHK=`SHA1(stdout)` AT_CHECK(test $CHK = $VER0) -AT_CHECK(MONOTONE --db=test2.db cat file $F_VER0, [], [stdout]) +AT_CHECK(MONOTONE --db=test2.db automate get_file $F_VER0, [], [stdout]) AT_CHECK(CANONICALISE(stdout)) CHK=`SHA1(stdout)` AT_CHECK(test $CHK = $F_VER0) ======================================================================== --- tests/t_netsync_unrelated.at bdd90ebe0b092465055b16fff07ccdfe75b8f7a0 +++ tests/t_netsync_unrelated.at e267f934990722a892df9ef39c96c3407b327f03 @@ -32,7 +32,7 @@ CHECK_SAME_STDOUT(MONOTONE ls certs $BASE, MONOTONE ls certs $BASE) AT_CHECK(rm -rf MT) -AT_CHECK(MONOTONE setup ., [], [ignore], [ignore]) +AT_CHECK(MONOTONE setup --branch=testbranch ., [], [ignore], [ignore]) ADD_FILE(testfile2, [This is test file 2 ]) ======================================================================== --- tests/t_normalized_filenames.at 204c06103e335f45230d94fc86ebcb686e6f7959 +++ tests/t_normalized_filenames.at bf31f5c1d260142de5455950615209dbd4f9c9b7 @@ -7,15 +7,15 @@ # the inner code directly. AT_DATA(MT/work, [add_file "." ]) -AT_CHECK(MONOTONE cat manifest, [3], [ignore], [ignore]) +AT_CHECK(MONOTONE automate get_manifest, [3], [ignore], [ignore]) AT_DATA(MT/work, [add_file "./bar" ]) AT_DATA(bar, [blah blah ]) -AT_CHECK(MONOTONE cat manifest, [3], [stdout], [ignore]) -AT_CHECK(MONOTONE cat revision, [3], [stdout], [ignore]) +AT_CHECK(MONOTONE automate get_manifest, [3], [stdout], [ignore]) +AT_CHECK(MONOTONE automate get_revision, [3], [stdout], [ignore]) AT_CHECK(MONOTONE commit --message=foo --branch=foo, [3], [ignore], [ignore]) AT_CLEANUP ======================================================================== --- tests/t_persistent_server_keys_2.at f974ca0aba33b2107a1fd7677ded50faa52b3a05 +++ tests/t_persistent_server_keys_2.at 63a6ad1e1eebabf989fa1d061cb8194614caf134 @@ -1,14 +1,8 @@ AT_SETUP([(imp) persistent netsync server - keys 2]) AT_KEYWORDS(netsync) MONOTONE_SETUP NETSYNC_SETUP -# This test is a bug report -AT_XFAIL_IF(true) -# Probably this one should not be fixed directly, but by implementing -# the changes described in t_netsync_diffbranch.at, which would solve -# it automatically. OTOH, a fix for this wouldn't be a _bad_ thing. - # This tests a somewhat subtle version of how public keys are handled # with netsync. The rule is, we serve a key if we're serving any cert # signed by that key. The question is, if when we boot up the server @@ -25,7 +19,7 @@ ADD_FILE(foo, [data data blah ]) -AT_CHECK(MONOTONE2 commit address@hidden --branch=testbranch blah, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 commit address@hidden --branch=testbranch -m 'commit foo' foo, [], [ignore], [ignore]) NETSYNC_SERVE_START(testbranch) NETSYNC_CLIENT_N_RUN(2, push, testbranch) ======================================================================== --- tests/t_persistent_server_revision.at 8418111484ba4aaf797db3626a697ec88f4d0f88 +++ tests/t_persistent_server_revision.at 04fe8d8a529d07a8bfbb01e999bbbb99eecb254b @@ -15,7 +15,7 @@ AT_DATA(otherfile, [stuff stuff nonsense ]) -AT_CHECK(MONOTONE3 setup ., [], [ignore], [ignore]) +AT_CHECK(MONOTONE3 setup --branch=testbranch ., [], [ignore], [ignore]) AT_CHECK(MONOTONE3 add otherfile, [], [ignore], [ignore]) AT_CHECK(MONOTONE3 commit --branch=testbranch --message foo, [], [ignore], [ignore]) REV2=`BASE_REVISION` @@ -25,13 +25,13 @@ NETSYNC_CLIENT_N_RUN(2, sync, testbranch) NETSYNC_CLIENT_N_RUN(3, sync, testbranch) -CHECK_SAME_STDOUT(MONOTONE2 cat revision $REV1, MONOTONE3 cat revision $REV1) +CHECK_SAME_STDOUT(MONOTONE2 automate get_revision $REV1, MONOTONE3 automate get_revision $REV1) CHECK_SAME_STDOUT(MONOTONE2 ls certs $REV1, MONOTONE3 ls certs $REV1) # Also exercise files and manifest AT_CHECK(MONOTONE3 checkout --revision=$REV1 somedir, [], [ignore], [ignore]) NETSYNC_CLIENT_N_RUN(2, sync, testbranch) -CHECK_SAME_STDOUT(MONOTONE2 cat revision $REV2, MONOTONE3 cat revision $REV2) +CHECK_SAME_STDOUT(MONOTONE2 automate get_revision $REV2, MONOTONE3 automate get_revision $REV2) CHECK_SAME_STDOUT(MONOTONE2 ls certs $REV2, MONOTONE3 ls certs $REV2) # Also exercise files and manifest AT_CHECK(MONOTONE2 checkout --revision=$REV2 otherdir, [], [ignore], [ignore]) @@ -56,7 +56,7 @@ NETSYNC_CLIENT_N_RUN(3, sync, testbranch) NETSYNC_CLIENT_N_RUN(2, sync, testbranch) -CHECK_SAME_STDOUT(MONOTONE2 cat revision $REV3, MONOTONE3 cat revision $REV3) +CHECK_SAME_STDOUT(MONOTONE2 automate get_revision $REV3, MONOTONE3 automate get_revision $REV3) CHECK_SAME_STDOUT(MONOTONE2 ls certs $REV3, MONOTONE3 ls certs $REV3) # Also exercise files and manifest AT_CHECK(MONOTONE2 checkout --revision=$REV3 somedir2, [], [ignore], [ignore]) @@ -66,7 +66,7 @@ NETSYNC_CLIENT_N_RUN(3, sync, testbranch) -CHECK_SAME_STDOUT(MONOTONE2 cat revision $REV4, MONOTONE3 cat revision $REV4) +CHECK_SAME_STDOUT(MONOTONE2 automate get_revision $REV4, MONOTONE3 automate get_revision $REV4) CHECK_SAME_STDOUT(MONOTONE2 ls certs $REV4, MONOTONE3 ls certs $REV4) # Also exercise files and manifest AT_CHECK(MONOTONE3 checkout --revision=$REV4 somedir3, [], [ignore], [ignore]) ======================================================================== --- tests/t_rcfile_dir.at ef248856acc3362e65a272c54c8ce0131c3aae0f +++ tests/t_rcfile_dir.at f9aa64b4b4df88b80587b24a87f1d77408a7b576 @@ -16,7 +16,7 @@ ]) # note: rcfile is placed outside workdir -AT_CHECK(MONOTONE setup alt_wrk, [], [ignore], [ignore]) +AT_CHECK(MONOTONE setup --branch=testbranch alt_wrk, [], [ignore], [ignore]) AT_CHECK(cd alt_wrk && MONOTONE --root=. --rcfile=../gongolo status, [], [stdout], [ignore]) AT_CHECK(QGREP("BOOGA BOOGACICCA CICCA" stdout)) ======================================================================== --- tests/t_remerge.at 83424c6866711fddcd090865370ff3f9db1a37b9 +++ tests/t_remerge.at e9cf7d222425e8ed9f7c10a3714af3e5bf5b143e @@ -89,7 +89,7 @@ AT_CHECK(MONOTONE --branch=branch.y merge, [], [ignore], [ignore]) AT_CHECK(MONOTONE --branch=branch.y update, [], [ignore], [ignore]) -AT_CHECK(MONOTONE cat manifest, [], [stdout]) +AT_CHECK(MONOTONE automate get_manifest, [], [stdout]) AT_CHECK(mv stdout manifest) AT_CHECK(grep y manifest, [], [ignore], [ignore]) AT_CHECK(grep -v x manifest, [], [ignore], [ignore]) ======================================================================== --- tests/t_rename.at 9294b9b72fc4eb10f0954f07d3a6103e0c123ab0 +++ tests/t_rename.at 4ec762efe273f44b4a63dcc27cb9c40b0af312b4 @@ -31,7 +31,7 @@ # merge the add and the rename AT_CHECK(MONOTONE merge, [], [ignore], [ignore]) AT_CHECK(MONOTONE update, [], [ignore], [ignore]) -AT_CHECK(MONOTONE cat manifest, [ignore], [stdout]) +AT_CHECK(MONOTONE automate get_manifest, [ignore], [stdout]) AT_CHECK(mv stdout manifest) AT_CHECK(grep bar manifest, [0], [ignore], [ignore]) AT_CHECK(grep bleh manifest, [0], [ignore], [ignore]) ======================================================================== --- tests/t_rename_dir_cross_level.at 11a1751be8693f71676c8c047c1a81b0d4ed2940 +++ tests/t_rename_dir_cross_level.at 400f1b82f0f9594a2c6592c420a9728a9b75f250 @@ -50,7 +50,7 @@ REVERT_TO($BASE_R) AT_CHECK(MONOTONE rename $OLD_DIR/ $NEW_DIR/, [], [ignore], [ignore]) -AT_CHECK(mv $OLD_DIR/ $NEW_DIR/) +AT_CHECK(mv $OLD_DIR $NEW_DIR) COMMIT(testbranch) RIGHT_R=`BASE_REVISION` ======================================================================== --- tests/t_renamed.at 40f40d3f72061961a6c39af95641177b3289110e +++ tests/t_renamed.at 94f19a1bcd6feb2de88e5c4ab0133065ccb64c9a @@ -35,7 +35,7 @@ # merge the add and the rename AT_CHECK(MONOTONE merge, [], [ignore], [ignore]) AT_CHECK(MONOTONE update, [], [ignore], [ignore]) -AT_CHECK(MONOTONE cat manifest, [ignore], [stdout]) +AT_CHECK(MONOTONE automate get_manifest, [ignore], [stdout]) AT_CHECK(mv stdout manifest) AT_CHECK(grep bar/bar manifest, [0], [ignore], [ignore]) AT_CHECK(grep bar/foo manifest, [0], [ignore], [ignore]) ======================================================================== --- tests/t_scan.at 5269c1fe377163e3a6743b0737e95b45e005b902 +++ tests/t_scan.at b203ac2f2e3960f90effbaba0595c6681c34e386 @@ -26,7 +26,7 @@ AT_CHECK(MONOTONE add testfile0 foo, [], [ignore], [ignore]) AT_CHECK(MONOTONE --branch=testbranch commit --message='blah blah', [], [ignore], [ignore]) -AT_CHECK(MONOTONE cat manifest, [], [stdout]) +AT_CHECK(MONOTONE automate get_manifest, [], [stdout]) AT_CHECK(CANONICALISE(stdout)) AT_CHECK(cmp stdout manifest, [], [ignore]) ======================================================================== --- tests/t_set_default.at 95505520a46b66a6120dae44779dbb01f16fdafb +++ tests/t_set_default.at 4869ee5e5dee61a59e25a34facb6f5834696651d @@ -10,7 +10,7 @@ # set defaults in db 2 RUN_NETSYNC(pull, testbranch) -AT_CHECK(MONOTONE2 cat revision $T1, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $T1, [], [ignore], [ignore]) SET_FILE(testfile, [blah blah ]) @@ -21,7 +21,7 @@ NETSYNC_SERVE_START(testbranch) AT_CHECK(MONOTONE2 pull, [], [ignore], [ignore]) NETSYNC_SERVE_STOP -AT_CHECK(MONOTONE2 cat revision $T2, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $T2, [], [ignore], [ignore]) # do a --set-default pull of another branch NETSYNC_SERVE_START(otherbranch) @@ -39,6 +39,6 @@ AT_CHECK(MONOTONE2 pull, [], [ignore], [ignore]) NETSYNC_SERVE_STOP -AT_CHECK(MONOTONE2 cat revision $O1, [], [ignore], [ignore]) +AT_CHECK(MONOTONE2 automate get_revision $O1, [], [ignore], [ignore]) AT_CLEANUP ======================================================================== --- tests/t_setup_existing_path.at 65ed903effa04ed5e70989bf0bfd4b1938e6878f +++ tests/t_setup_existing_path.at 0f84f1e69ba45ca565d23fdf122d91154af1d286 @@ -1,11 +1,11 @@ AT_SETUP([setup on existing path]) MONOTONE_SETUP AT_DATA(foo, [blah blah ]) -AT_CHECK(MONOTONE setup foo, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE setup --branch=testbranch foo, [1], [ignore], [ignore]) AT_CHECK(mkdir bar) -AT_CHECK(MONOTONE setup bar, [], [ignore], [ignore]) +AT_CHECK(MONOTONE setup --branch=testbranch bar, [], [ignore], [ignore]) AT_CHECK(test -d bar/MT) AT_CLEANUP ======================================================================== --- tests/t_singlecvs.at 7d51de64a3015214985b09b0d744f6c22afbf986 +++ tests/t_singlecvs.at 3ab763cc4821f58ecc8cea7ff0d1b8f62004c8ad @@ -29,6 +29,6 @@ # import into monotone and check presence of file AT_CHECK(MONOTONE --branch=testbranch cvs_import $CVSROOT/testdir, [], [ignore], [ignore]) -AT_CHECK(MONOTONE cat file $TSHA0, [], [ignore]) +AT_CHECK(MONOTONE automate get_file $TSHA0, [], [ignore]) AT_CLEANUP ======================================================================== --- tests/t_sticky_branch.at 383e882866f67eec58c597b01605cf8233061ff0 +++ tests/t_sticky_branch.at 452ed835d2e831480a7fff9ef2c8b5c539bcbf85 @@ -47,12 +47,12 @@ AT_CHECK(cmp otherdir/foo updir/foo) # merge doesn't affect given branch -AT_CHECK(MONOTONE setup third1, [], [ignore], [ignore]) +AT_CHECK(MONOTONE setup --branch=testbranch third1, [], [ignore], [ignore]) AT_DATA(third1/a, [1a ]) AT_CHECK(cd third1 && MONOTONE add a, [], [ignore], [ignore]) AT_CHECK(cd third1 && MONOTONE commit --branch=third --message=foo, [], [ignore], [ignore]) -AT_CHECK(MONOTONE setup third2, [], [ignore], [ignore]) +AT_CHECK(MONOTONE setup --branch=testbranch third2, [], [ignore], [ignore]) AT_DATA(third2/b, [2b ]) AT_CHECK(cd third2 && MONOTONE add b, [], [ignore], [ignore]) ======================================================================== --- tests/t_unreadable_MT.at a3ed09e7bf8c01bdf42c8184a9acd1683c4a6034 +++ tests/t_unreadable_MT.at d732c69dc8d90926de48dd11938a48b436265012 @@ -1,7 +1,10 @@ # -*- Autoconf -*- AT_SETUP([fail cleanly on unreadable MT/options]) +# disable for now; can't see a sane way to test this +NOT_ON_WIN32 + MONOTONE_SETUP AT_CHECK(chmod a-rwx MT/) ======================================================================== --- tests/t_unreadable_db.at +++ tests/t_unreadable_db.at c69591064c72591c66a6f5d1b34dfbae0ca6c8ef @@ -0,0 +1,35 @@ +AT_SETUP([fail cleanly on unreadable db]) +MONOTONE_SETUP + +# disable for now; can't see a sane way to test this +NOT_ON_WIN32 + +ADD_FILE(testfile, [blah blah +]) + +# unreadable file +AT_CHECK(chmod a-rwx test.db) +AT_CHECK(MONOTONE, [], [ignore], [ignore]) +AT_CHECK(MONOTONE ls branches, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE db info, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE db version, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE db migrate, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE commit -mfoo, [1], [ignore], [ignore]) +AT_CHECK(echo | MONOTONE db load, [1], [ignore], [ignore]) +AT_CHECK(chmod a+rwx test.db) + +AT_CHECK(mkdir subdir) +AT_CHECK(MONOTONE --db subdir/foo.db db init, [], [ignore], [ignore]) + +# unreadable directory +AT_CHECK(chmod a-rwx subdir) +AT_CHECK(MONOTONE --db subdir/foo.db, [], [ignore], [ignore]) +AT_CHECK(MONOTONE --db subdir/foo.db ls branches, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE --db subdir/foo.db db info, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE --db subdir/foo.db db version, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE --db subdir/foo.db db migrate, [1], [ignore], [ignore]) +AT_CHECK(echo | MONOTONE --db subdir/foo.db db load, [1], [ignore], [ignore]) +AT_CHECK(MONOTONE --db subdir/bar.db db init, [1], [ignore], [ignore]) +AT_CHECK(chmod a+rwx subdir) + +AT_CLEANUP ======================================================================== --- tests/t_update_with_pending_add.at 8394d96a687a14e6dcae400383d3bef0e76d1f78 +++ tests/t_update_with_pending_add.at 357bc4be7680dd9d3a898ae914aa1c6a11a47996 @@ -24,8 +24,7 @@ # why doesn't an abbreviated revision id work -AT_CHECK(cd codir && MONOTONE cat revision b482, [1], [ignore], [ignore]) -AT_CHECK(cd codir && MONOTONE cat revision b482c907f27f160f7ff9259d353d5d5399fb9fc4, [], [ignore], [ignore]) +AT_CHECK(cd codir && MONOTONE automate get_revision b482c907f27f160f7ff9259d353d5d5399fb9fc4, [], [ignore], [ignore]) # make sure there are no changes in the working copy ======================================================================== --- tests/t_update_with_pending_drop.at d52d3736c75a01c308500e12237edaf37e8f345f +++ tests/t_update_with_pending_drop.at 00cdc65ce50b1b3b3c54d0542653c7ec47e27072 @@ -19,9 +19,7 @@ AT_CHECK(cd codir && MONOTONE drop file, [], [ignore], [ignore]) AT_CHECK(cd codir && MONOTONE update, [], [ignore], [ignore]) -# why doesn't an abbreviated revision id work -AT_CHECK(cd codir && MONOTONE cat revision a12d, [1], [ignore], [ignore]) -AT_CHECK(cd codir && MONOTONE cat revision a12d8ad50bf5861310c22979ef6c3a8b8a686522, [], [ignore], [ignore]) +AT_CHECK(cd codir && MONOTONE automate get_revision a12d8ad50bf5861310c22979ef6c3a8b8a686522, [], [ignore], [ignore]) # make sure there are no changes in the working copy ======================================================================== --- tests/t_update_with_pending_rename.at d6e60af87b017d9269e0c3c797c93d0a696648fc +++ tests/t_update_with_pending_rename.at 99e70ea11a371b7b400bd8f4dd1fad467f9645e4 @@ -20,9 +20,8 @@ AT_CHECK(cd codir && MONOTONE rename file file2, [], [ignore], [ignore]) AT_CHECK(cd codir && MONOTONE update, [], [ignore], [ignore]) -# why doesn't an abbreviated revision id work -AT_CHECK(cd codir && MONOTONE cat revision 0cb6, [1], [ignore], [ignore]) -AT_CHECK(cd codir && MONOTONE cat revision 0cb6da39a252816db091c515efa830840e77c4eb, [], [ignore], [ignore]) +AT_CHECK(cd codir && MONOTONE automate get_revision 0cb6, [1], [ignore], [ignore]) +AT_CHECK(cd codir && MONOTONE automate get_revision 0cb6da39a252816db091c515efa830840e77c4eb, [], [ignore], [ignore]) # make sure there are no changes in the working copy ======================================================================== --- tests/t_versions.at 91d6fb7180cd75fde30d7f5b82e29cf5feaf9277 +++ tests/t_versions.at 49105adca6a5a867ec44be87731651eacb8cb437 @@ -28,7 +28,7 @@ RSHA=`cat rsha-$i` FSHA=`cat fsha-$i` - AT_CHECK(MONOTONE cat file $FSHA, [], [stdout]) + AT_CHECK(MONOTONE automate get_file $FSHA, [], [stdout]) AT_CHECK(CANONICALISE(stdout)) AT_CHECK(cmp stdout testfile, [], [ignore]) ======================================================================== --- testsuite.at 3069578e5268491a6c837912613346860e6f7ea5 +++ testsuite.at f37b217c9d261739b96a0f8ccdc61269f1c0ee67 @@ -37,9 +37,10 @@ # Save the PWD so MONOTONE macro can refer back to it _ROOT_DIR=`pwd -P` -# Pick a random port, so running multiple testsuites concurrently on -# the same machine has a hope of working. -_PORT=`awk 'BEGIN {srand()} END {printf "%.0f\n", (rand() * 450 + 20050)}'< /dev/null` +# Pick a random port, so running multiple testsuites concurrently on the +# same machine has a hope of working. Port range will usually be +# 20050..53347. +_PORT=`echo $RANDOM | awk 'BEGIN {a=1;srand()} END {printf "%.0f\n", ((rand() * 529 + 20050 + $a) % 64512 + 1024)}'` AT_DATA(test_keys, [@<:@pubkey address@hidden@:>@ MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQCfN/cAMabgb6T7m8ksGnpQ7LO6hOdnc/7V @@ -138,9 +139,9 @@ ]) -AT_CHECK(MONOTONE setup ., [], [ignore], [ignore]) AT_CHECK(MONOTONE db init, [], [ignore], [ignore]) AT_CHECK(MONOTONE read issued_warnings; ======================================================================== --- win32/fs.cc 38ce311dec5f6b399c799ff10cc3e8c8dae4429c +++ win32/fs.cc dc98eb08c96cda5ca2e73e8a29dea19cb40b00bf @@ -80,9 +80,11 @@ } utf8 -tilde_expand(utf8 const & path) +tilde_expand(utf8 const & in) { - fs::path tmp(path(), fs::native); + if (in().empty() || in()[0] != '~') + return in; + fs::path tmp(in(), fs::native); fs::path::iterator i = tmp.begin(); if (i != tmp.end()) { @@ -93,7 +95,7 @@ ++i; } while (i != tmp.end()) - res /= mkpath(*i++); + res /= *i++; return res.string(); } ======================================================================== --- win32/inodeprint.cc b861168f4636365c587b88177629559acfad329e +++ win32/inodeprint.cc 958ef1bcb5ee1711a55894151ed1742fa3074ddc @@ -29,7 +29,7 @@ bool inodeprint_file(file_path const & file, hexenc & ip) { struct _stati64 st; - if (_stati64(localized_as_string(file).c_str(), &st) < 0) + if (_stati64(file.as_external().c_str(), &st) < 0) return false; Botan::SHA_160 hash; @@ -38,7 +38,7 @@ add_hash(hash, st.st_dev); add_hash(hash, st.st_size); - HANDLE filehandle = CreateFile(file().c_str(), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + HANDLE filehandle = CreateFile(file.as_external().c_str(), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (filehandle == INVALID_HANDLE_VALUE) return false; ======================================================================== --- win32/terminal.cc e79234a8f5c29f47deae3d84703a2792678b6e74 +++ win32/terminal.cc 3eb6dc1cb604200139e367919e66a7438a986a6c @@ -19,8 +19,9 @@ else term = ""; - if (term == "" || term == "emacs" || term == "dumb" - || !_isatty(_fileno(stderr))) + // Win32 consoles are weird; cmd.exe does not set TERM, but isatty returns + // true, Cygwin and MinGW MSYS shells set a TERM but isatty returns false. + if (term == "emacs" || term == "dumb" || !isatty(fileno(stderr))) return false; else return true;