# # # patch "NEWS" # from [b9034e67e73f60163830996df6020058d77a332c] # to [2a454ac2be99bd1e41b43efa64fcd6ade95ba4b9] # # patch "UPGRADE" # from [6052a50d43bd883a92d73daa17b0ec2909b6448a] # to [80d9904903a527e11b8c6ab9f095e440fddea8eb] # # patch "docs/Automation.html" # from [6b134ea5f3c2d82793b95327288d0ce8aea0bb62] # to [b6eccdddffeb81a4f343b55fc43aabb33e45c03f] # # patch "docs/Default-hooks.html" # from [426d6f8d291d2c1b66af91f7fc541cb4322b4c71] # to [99892ddc48e8c728b6b1959b1d0e51ffbd5ce69e] # # patch "docs/Key-and-Cert-Trust.html" # from [9a87d94eb16d0d44085edd2bd8339648e42aaa5b] # to [fe3c48ac5de701bce5ad94b1efa8cfc1db1fd7a8] # # patch "docs/Other-Transports.html" # from [4a0047e6f6556a6314755fad17c23408979235f1] # to [910d073c89285a29d1a7e64acdd89e22e9bb763a] # # patch "docs/Selectors.html" # from [27ff2f3960012335a26dfe8f355773418e1bb9ac] # to [b10a322c7a643b71e36c803fca49fecacb266bfd] # # patch "monotone.html" # from [f3620d6af7b59c2c8e08e80e473c8298b5f9dc95] # to [c75053c40e42a8bdf7899495223b00f2d5d2e41a] # # patch "monotone.pdf" # from [af9abc648e45e83c487d06ff496493b96517cf7d] # to [1b1d863f21f30d0d15b9f49aa5f7b7a1adbc62c6] # ============================================================ --- NEWS b9034e67e73f60163830996df6020058d77a332c +++ NEWS 2a454ac2be99bd1e41b43efa64fcd6ade95ba4b9 @@ -1,3 +1,68 @@ +Fri Apr 11 22:50:44 UTC 2008 + + 0.40 release. + + Changes + + - The vim merger has been improved and now uses diff3 to merge + non-conflict changes automatically before executing vimdiff. + + - Values used with the --depth option used to control recursion with + node and path restrictions have changed. Using --depth=0 now means + exactly the specified directories and *not* their children. Using + --depth=1 now means the specified directories and their immediate + children. Previously --depth=0 included children and --depth=1 + included grandchildren and it was not possible to exclude children + using --depth. The simple fix for anyone using --depth is to add 1 to + the values they are using. + + - Document that ssh: and file: sync transports are not supported on + native Win32. + + Bugs fixed + + - `commit' now uses keydir specified in _MTN/options + + - duplicate name conflicts now show a proper error message, even if + a parent directory got renamed as well. In that case, the error + message now shows both names for the directory and the offending + file name. + + New features + + - The bare parent selector 'p:' can now be used in a workspace to + query the parent(s) of the workspace' base revision. This is + equivalent to "mtn au select p:`mtn au get_base_workspace_revision`". + + - push, pull, and sync can be run with a single argument, which looks + like + mtn://hostname?include_pattenr/-exclude_pattern + or + mtn://hostname?include=include_pattern/exclude=exclude_pattern + + Internal + + - Update Botan to 1.7.4. + + - Usage of the internal app_state object has been reduced, objects + are better encapsulated now. The database interface has been + enhanced to ease reduction of locking contention in the future. + + - Merged the two indexes on revision_certs into a single one. + + - The database schema has been changed so that it now stores + binary SHA1 hashes rather than their hexadecimal encoding, + in most places where these are used. This reduces the + database size and speeds up operations a little. + + Users who like to fiddle with the database directly are + advised to use the sqlite functions hex() and quote() to + print columns that store hashes (including IDs), and the + hexadecimal literal notation x'DEADBEEF' to input them. + + - Binary SHA1 hashes are also used for most in-memory + processing, avoiding conversions and saving memory. + Mon Feb 25 15:55:36 UTC 2008 0.39 release. @@ -27,7 +92,7 @@ Mon Feb 25 15:55:36 UTC 2008 If you use the '--with-system-pcre' configure switch, it will insist on at least this version. - - "emacs" has been removed from the list of dumb terminal types; + - "emacs" has been removed from the list of dumb terminal types; tickers should now default to --ticker=count with emacs terminals - extensive section on merge conflicts and ways to resolve them @@ -41,13 +106,13 @@ Mon Feb 25 15:55:36 UTC 2008 - the path handling of 'mtn revert' was improved and fixed two bugs: now a restricted revert on a node "dir1/file1" reverts only the content changes in "file1", but leaves renames of any of its - ancestor nodes untouched; furthermore, if "dir0/" was renamed to + ancestor nodes untouched; furthermore, if "dir0/" was renamed to "dir1" and "dir1/file1" was dropped, mtn now re-creates file1 at the proper place ("dir1/") and leaves no missing files around because of the non-existing "dir0/". - a few changes needed to build with gcc 4.3. - + New features - 'automate drop_db_variables' which drops one database variable @@ -61,9 +126,9 @@ Mon Feb 25 15:55:36 UTC 2008 directories. The typical case of listing files that need attention now runs at least four times faster. - - 'automate get_current_revision' which outputs the revision text of + - 'automate get_current_revision' which outputs the revision text of changes in the current workspace - + Wed Dec 12 21:21:15 UTC 2007 0.38 release. ============================================================ --- UPGRADE 6052a50d43bd883a92d73daa17b0ec2909b6448a +++ UPGRADE 80d9904903a527e11b8c6ab9f095e440fddea8eb @@ -1,4 +1,4 @@ -upgrading monotone to 0.39 +upgrading monotone to 0.40 ========================== How to read this file: @@ -16,7 +16,7 @@ If you are upgrading from: will be described there, not here. If you are upgrading from: - - 0.33 or earlier: The database format has changed. You must run + - 0.39 or earlier: The database format has changed. You must run (after remembering to take a backup copy): $ mtn -d mydb.mtn db migrate on each of your databases. ============================================================ --- docs/Automation.html 6b134ea5f3c2d82793b95327288d0ce8aea0bb62 +++ docs/Automation.html b6eccdddffeb81a4f343b55fc43aabb33e45c03f @@ -583,7 +583,7 @@ A file path. A file path.
Added in:
-4.2 +4.3
Purpose:
Prints the file ID (aka hash) of the given file. @@ -1982,7 +1982,7 @@ and file specifies the file f and file specifies the file for which to calculate revisions in which it was last changed.
Added in:
-3.2 +4.0
Purpose:
Returns a list of revision IDs in which the content was most recently changed, relative to the revision ID specified as id. This equates to a content mark following the *-merge algorithm. @@ -2015,7 +2015,7 @@ and file specifies the file w target_id specifies a revision ID.
Added in:
-3.2 +4.0
Purpose:
Given a the file name file in the source revision source_id, a filename ============================================================ --- docs/Default-hooks.html 426d6f8d291d2c1b66af91f7fc541cb4322b4c71 +++ docs/Default-hooks.html 99892ddc48e8c728b6b1959b1d0e51ffbd5ce69e @@ -463,20 +463,55 @@ mergers.vim = { mergers.vim = { cmd = function (tbl) + function execute_diff3(mine, yours, out) + local diff3_args = { + "diff3", + "--merge", + "--easy-only", + } + table.insert(diff3_args, string.gsub(mine, "\\", "/") .. "") + table.insert(diff3_args, string.gsub(tbl.afile, "\\", "/") .. "") + table.insert(diff3_args, string.gsub(yours, "\\", "/") .. "") + + return execute_redirected("", string.gsub(out, "\\", "/"), "", unpack(diff3_args)) + end + io.write (string.format("\nWARNING: 'vim' was choosen to perform external 3-way merge.\n".. "You should merge all changes to *LEFT* file due to limitation of program\n".. - "arguments. The order of the files is ancestor, left, right.\n\n")) + "arguments.\n\n")) + local vim - local exec if os.getenv ("DISPLAY") ~= nil and program_exists_in_path ("gvim") then vim = "gvim" - exec = execute_confirm else vim = "vim" - exec = execute end - local ret = exec(vim, "-f", "-d", "-c", string.format("file %s", tbl.outfile), - tbl.afile, tbl.lfile, tbl.rfile) + + local lfile_merged = tbl.lfile .. ".merged" + local rfile_merged = tbl.rfile .. ".merged" + + -- first merge lfile using diff3 + local ret = execute_diff3(tbl.lfile, tbl.rfile, lfile_merged) + if ret == 2 then + io.write(string.format(gettext("Error running diff3 for merger '%s'\n"), vim)) + os.remove(lfile_merged) + return false + end + + -- now merge rfile using diff3 + ret = execute_diff3(tbl.rfile, tbl.lfile, rfile_merged) + if ret == 2 then + io.write(string.format(gettext("Error running diff3 for merger '%s'\n"), vim)) + os.remove(lfile_merged) + os.remove(rfile_merged) + return false + end + + os.rename(lfile_merged, tbl.lfile) + os.rename(rfile_merged, tbl.rfile) + + local ret = execute(vim, "-f", "-d", "-c", string.format("file %s", tbl.outfile), + tbl.lfile, tbl.rfile) if (ret ~= 0) then io.write(string.format(gettext("Error running merger '%s'\n"), vim)) return false @@ -485,8 +520,9 @@ mergers.vim = { end , available = function () - return program_exists_in_path("vim") or - program_exists_in_path("gvim") + return program_exists_in_path("diff3") and + (program_exists_in_path("vim") or + program_exists_in_path("gvim")) end , wanted = function () @@ -1260,7 +1296,8 @@ do function push_netsync_notifier(notifier) return push_hook_functions(notifier) end -end +end + ============================================================ --- docs/Key-and-Cert-Trust.html 9a87d94eb16d0d44085edd2bd8339648e42aaa5b +++ docs/Key-and-Cert-Trust.html fe3c48ac5de701bce5ad94b1efa8cfc1db1fd7a8 @@ -51,6 +51,16 @@ careful using this hook. increases the risk of a key compromise on your local computer. Be careful using this hook. +

The public key is stored in the database; the public and private keys +are stored in the keystore. This allows copying the database without +copying the private key. + +

The location of the keystore is specified by the --keydir +option; it defaults to the value stored in _MTN/options for +commands executed in a workspace, or to +the system default (~/.monotone/keys on Unix and Cygwin, +%APPDATA%/monotone/keys on native Win32). +

mtn dropkey keyid
This command drops the public and/or private key. If both exist, both are dropped, if only one exists, it is dropped. This command should ============================================================ --- docs/Other-Transports.html 4a0047e6f6556a6314755fad17c23408979235f1 +++ docs/Other-Transports.html 910d073c89285a29d1a7e64acdd89e22e9bb763a @@ -66,6 +66,9 @@ host and port, and speaks netsync over t file:/path/to/db.mtn, to synchronize between local databases. +

ssh: and file: are currently not supported on the native +Win32 platform; they are supported on Cygwin and all other platforms. +

In the case of SSH URIs, the ssh program must be in your command execution path, either $PATH on Unix-like systems or %PATH% on Windows systems. Monotone will execute ssh ============================================================ --- docs/Selectors.html 27ff2f3960012335a26dfe8f355773418e1bb9ac +++ docs/Selectors.html b10a322c7a643b71e36c803fca49fecacb266bfd @@ -109,7 +109,8 @@ revision IDs which are the parent of the revision IDs which begin with 0f3a.

Parent selection
Uses selector type p. For example, p:0f3a matches the revision IDs which are the parent of the revision ID which begins with -0f3a. +0f3a. If you give a bare p:, monotone will require you to be in +a workspace, and query the parent of the base workspace revision.
Tag selection
Uses selector type t. For example, t:monotone-0.11 matches tag certs where the cert value begins with monotone-0.11. Values to match for can have shell wildcards. ============================================================ --- monotone.html f3620d6af7b59c2c8e08e80e473c8298b5f9dc95 +++ monotone.html c75053c40e42a8bdf7899495223b00f2d5d2e41a @@ -1918,6 +1918,9 @@ host and port, and speaks netsync over t file:/path/to/db.mtn, to synchronize between local databases. +

ssh: and file: are currently not supported on the native +Win32 platform; they are supported on Cygwin and all other platforms. +

In the case of SSH URIs, the ssh program must be in your command execution path, either $PATH on Unix-like systems or %PATH% on Windows systems. Monotone will execute ssh @@ -2020,7 +2023,8 @@ revision IDs which are the parent of the revision IDs which begin with 0f3a.

Parent selection
Uses selector type p. For example, p:0f3a matches the revision IDs which are the parent of the revision ID which begins with -0f3a. +0f3a. If you give a bare p:, monotone will require you to be in +a workspace, and query the parent of the base workspace revision.
Tag selection
Uses selector type t. For example, t:monotone-0.11 matches tag certs where the cert value begins with monotone-0.11. Values to match for can have shell wildcards. @@ -4275,6 +4279,16 @@ careful using this hook. increases the risk of a key compromise on your local computer. Be careful using this hook. +

The public key is stored in the database; the public and private keys +are stored in the keystore. This allows copying the database without +copying the private key. + +

The location of the keystore is specified by the --keydir +option; it defaults to the value stored in _MTN/options for +commands executed in a workspace, or to +the system default (~/.monotone/keys on Unix and Cygwin, +%APPDATA%/monotone/keys on native Win32). +

mtn dropkey keyid
This command drops the public and/or private key. If both exist, both are dropped, if only one exists, it is dropped. This command should @@ -5246,7 +5260,7 @@ A file path. A file path.
Added in:
-4.2 +4.3
Purpose:
Prints the file ID (aka hash) of the given file. @@ -6645,7 +6659,7 @@ and file specifies the file f and file specifies the file for which to calculate revisions in which it was last changed.
Added in:
-3.2 +4.0
Purpose:
Returns a list of revision IDs in which the content was most recently changed, relative to the revision ID specified as id. This equates to a content mark following the *-merge algorithm. @@ -6678,7 +6692,7 @@ and file specifies the file w target_id specifies a revision ID.
Added in:
-3.2 +4.0
Purpose:
Given a the file name file in the source revision source_id, a filename @@ -12240,20 +12254,55 @@ mergers.vim = { mergers.vim = { cmd = function (tbl) + function execute_diff3(mine, yours, out) + local diff3_args = { + "diff3", + "--merge", + "--easy-only", + } + table.insert(diff3_args, string.gsub(mine, "\\", "/") .. "") + table.insert(diff3_args, string.gsub(tbl.afile, "\\", "/") .. "") + table.insert(diff3_args, string.gsub(yours, "\\", "/") .. "") + + return execute_redirected("", string.gsub(out, "\\", "/"), "", unpack(diff3_args)) + end + io.write (string.format("\nWARNING: 'vim' was choosen to perform external 3-way merge.\n".. "You should merge all changes to *LEFT* file due to limitation of program\n".. - "arguments. The order of the files is ancestor, left, right.\n\n")) + "arguments.\n\n")) + local vim - local exec if os.getenv ("DISPLAY") ~= nil and program_exists_in_path ("gvim") then vim = "gvim" - exec = execute_confirm else vim = "vim" - exec = execute end - local ret = exec(vim, "-f", "-d", "-c", string.format("file %s", tbl.outfile), - tbl.afile, tbl.lfile, tbl.rfile) + + local lfile_merged = tbl.lfile .. ".merged" + local rfile_merged = tbl.rfile .. ".merged" + + -- first merge lfile using diff3 + local ret = execute_diff3(tbl.lfile, tbl.rfile, lfile_merged) + if ret == 2 then + io.write(string.format(gettext("Error running diff3 for merger '%s'\n"), vim)) + os.remove(lfile_merged) + return false + end + + -- now merge rfile using diff3 + ret = execute_diff3(tbl.rfile, tbl.lfile, rfile_merged) + if ret == 2 then + io.write(string.format(gettext("Error running diff3 for merger '%s'\n"), vim)) + os.remove(lfile_merged) + os.remove(rfile_merged) + return false + end + + os.rename(lfile_merged, tbl.lfile) + os.rename(rfile_merged, tbl.rfile) + + local ret = execute(vim, "-f", "-d", "-c", string.format("file %s", tbl.outfile), + tbl.lfile, tbl.rfile) if (ret ~= 0) then io.write(string.format(gettext("Error running merger '%s'\n"), vim)) return false @@ -12262,8 +12311,9 @@ mergers.vim = { end , available = function () - return program_exists_in_path("vim") or - program_exists_in_path("gvim") + return program_exists_in_path("diff3") and + (program_exists_in_path("vim") or + program_exists_in_path("gvim")) end , wanted = function () @@ -13037,7 +13087,8 @@ do function push_netsync_notifier(notifier) return push_hook_functions(notifier) end -end +end +

General Index

============================================================ # monotone.pdf is binary