Browse Source

upgrading package: monotone 0.36 -> 0.37

Ralf S. Engelschall 18 years ago
parent
commit
7dc74bf82c
3 changed files with 219 additions and 186 deletions
  1. 0 121
      monotone/monotone.patch
  2. 217 63
      monotone/monotone.patch.rse
  3. 2 2
      monotone/monotone.spec

+ 0 - 121
monotone/monotone.patch

@@ -1,121 +0,0 @@
-some upstream vendor fixes since monotone 0.36
-
-Index: automate.cc
---- automate.cc.orig	2007-08-03 08:15:05 +0200
-+++ automate.cc	2007-08-08 11:03:02 +0200
-@@ -69,12 +69,19 @@
-   N(args.size() < 2,
-     F("wrong argument count"));
- 
--  if (args.size() ==1 ) {
-+  system_path database_option;
-+  branch_name branch_option;
-+  rsa_keypair_id key_option;
-+  system_path keydir_option;
-+  app.work.get_ws_options(database_option, branch_option,
-+                          key_option, keydir_option);
-+
-+  if (args.size() == 1 ) {
-     // branchname was explicitly given, use that
--    app.opts.branchname = branch_name(idx(args, 0)());
-+    branch_option = branch_name(idx(args, 0)());
-   }
-   set<revision_id> heads;
--  app.get_project().get_branch_heads(app.opts.branchname, heads);
-+  app.get_project().get_branch_heads(branch_option, heads);
-   for (set<revision_id>::const_iterator i = heads.begin(); i != heads.end(); ++i)
-     output << (*i).inner()() << '\n';
- }
-Index: cmd_ws_commit.cc
---- cmd_ws_commit.cc.orig	2007-08-03 08:15:09 +0200
-+++ cmd_ws_commit.cc	2007-08-08 11:03:02 +0200
-@@ -444,7 +444,8 @@
- 
-   app.require_workspace();
- 
--  file_path dst_path = file_path_external(args.back());
-+  utf8 dstr = args.back();
-+  file_path dst_path = file_path_external(dstr);
- 
-   set<file_path> src_paths;
-   for (size_t i = 0; i < args.size()-1; i++)
-@@ -452,6 +453,15 @@
-       file_path s = file_path_external(idx(args, i));
-       src_paths.insert(s);
-     }
-+
-+  //this catches the case where the user specifies a directory 'by convention'
-+  //that doesn't exist.  the code in perform_rename already handles the proper
-+  //cases for more than one source item.
-+  if (src_paths.size() == 1 && dstr()[dstr().size() -1] == '/')
-+    if (get_path_status(*src_paths.begin()) != path::directory)
-+	    N(get_path_status(dst_path) == path::directory,
-+	      F(_("The specified target directory %s/ doesn't exist.")) % dst_path);
-+
-   app.work.perform_rename(src_paths, dst_path, app.opts.bookkeep_only);
- }
- 
-Index: work.cc
---- work.cc.orig	2007-08-03 08:15:16 +0200
-+++ work.cc	2007-08-08 11:03:02 +0200
-@@ -1435,9 +1435,7 @@
-     {
-       // "rename SRC DST" case
-       file_path const & src = *srcs.begin();
--
--      N(!directory_exists(dst),
--        F("destination dir %s/ is not versioned (perhaps add it?)") % dst);
-+      file_path dpath = dst;
- 
-       N(!src.empty(),
-         F("cannot rename the workspace root (try '%s pivot_root' instead)")
-@@ -1445,20 +1443,30 @@
-       N(new_roster.has_node(src),
-         F("source file %s is not versioned") % src);
- 
--      renames.insert(make_pair(src, dst));
--      add_parent_dirs(dst, new_roster, nis, db, lua);
-+      //this allows the 'magic add' of a non-versioned directory to happen in
-+      //all cases.  previously, mtn mv fileA dir/ woudl fail if dir/ wasn't
-+      //versioned whereas mtn mv fileA dir/fileA would add dir/ if necessary
-+      //and then reparent fileA.
-+      if (get_path_status(dst) == path::directory)
-+        dpath = dst / src.basename();
-+      else
-+        {
-+          //this handles the case where:
-+          // touch foo
-+          // mtn mv foo bar/foo where bar doesn't exist
-+          file_path parent = dst.dirname();
-+	        N(get_path_status(parent) == path::directory,
-+	          F("destination path's parent directory %s/ doesn't exist") % parent);
-+        }
-+
-+      renames.insert(make_pair(src, dpath));
-+      add_parent_dirs(dpath, new_roster, nis, db, lua);
-     }
-   else
-     {
-       // "rename SRC1 [SRC2 ...] DSTDIR" case
--      N(new_roster.has_node(dst),
--        F("destination dir %s/ is not versioned (perhaps add it?)") % dst);
--
--      N(is_dir_t(new_roster.get_node(dst)),
--        (srcs.size() > 1
--        ? F("destination %s is a file, not a directory")
--        : F("destination %s already exists in the workspace manifest"))
--        % dst);
-+      N(get_path_status(dst) == path::directory,
-+        F("destination %s/ is not a directory") % dst);
- 
-       for (set<file_path>::const_iterator i = srcs.begin();
-            i != srcs.end(); i++)
-@@ -1474,6 +1482,8 @@
-             F("destination %s already exists in the workspace manifest") % d);
- 
-           renames.insert(make_pair(*i, d));
-+
-+          add_parent_dirs(d, new_roster, nis, db, lua);
-         }
-     }
- 

+ 217 - 63
monotone/monotone.patch.rse

@@ -29,6 +29,9 @@
     just "doing anonymous pull" as mtn(1) doesn't have to teach people.
     That's for what the documentation is for.
     
+  o cosmetics-stat:
+    The workspace top-level directory is shown as "" instead of nothing.
+
   o cosmetics-diff-and-log:
     This cosmetically "improves" the output of "mtn diff" and "mtn
     log". For "mtn diff" The output of "mtn diff" now uses a separator
@@ -47,14 +50,23 @@
     align with the "svn diff" and "cvs diff" outputs. This also helps
     patch(1) to clearly identify the file to patch.
 
+  o extra-commands:
+    This adds "mtn fuse", "mtn conflicts" and "mtn revision" commands.
+    They are all simple but convenient Lua wrappers.
+
+  o dot-mtn-message:
+    Support a ".mtn-message" file in the root-directory as a template
+    for the commit messages.
+    
                                        Ralf S. Engelschall
                                        rse@engelschall.com
                                        www.engelschall.com
 
-============================================================
---- app_state.cc	74425b52934112d6f23c222e36516a69aee2bb29
-+++ app_state.cc	cc9111317d701076b496c80734ae89ab7c6e3741
-@@ -141,13 +141,24 @@ app_state::create_workspace(system_path 
+===================================================================
+Index: app_state.cc
+--- app_state.cc	6be9949e433ff6166fd030b34d8eb2d3e18c10b6
++++ app_state.cc	ce1cdaffff8c14261ab0a22a16571a0737532bbb
+@@ -138,13 +138,24 @@ app_state::create_workspace(system_path 
    go_to_workspace(new_dir);
    mark_std_paths_used();
  
@@ -79,9 +91,10 @@
    mkdir_p(bookkeeping_root);
  
    make_branch_sticky();
-============================================================
---- cmd_diff_log.cc	b95267396272bf66f1c4c17b19659cc4e734213a
-+++ cmd_diff_log.cc	070f04c88e5a724545d48c3669d78fa2394987f3
+===================================================================
+Index: cmd_diff_log.cc
+--- cmd_diff_log.cc	bd55c33e185979f03a6e5fe2d32188fac1dc0676
++++ cmd_diff_log.cc	86f22362b1640761711b1ca75a1a63f19a5b1a1c
 @@ -96,6 +96,27 @@ print_indented_set(ostream & os,
                     set<file_path> const & s,
                     size_t max_cols)
@@ -164,7 +177,7 @@
        output << patch_sep << '\n';
  
        app.db.get_file_version(delta_entry_src(i), f_old);
-@@ -493,6 +530,9 @@ CMD(diff, "diff", "", CMD_REF(informativ
+@@ -499,6 +536,9 @@ CMD(diff, "diff", "", CMD_REF(informativ
    data summary;
    write_cset(included, summary);
  
@@ -174,7 +187,7 @@
    vector<string> lines;
    split_into_lines(summary(), lines);
    cout << "#\n";
-@@ -508,6 +548,9 @@ CMD(diff, "diff", "", CMD_REF(informativ
+@@ -514,6 +554,9 @@ CMD(diff, "diff", "", CMD_REF(informativ
        cout << "# " << _("no changes") << '\n';
      }
    cout << "#\n";
@@ -184,7 +197,7 @@
  
    if (app.opts.diff_format == external_diff)
      {
-@@ -871,7 +914,11 @@ CMD(log, "log", "", CMD_REF(informative)
+@@ -877,7 +920,11 @@ CMD(log, "log", "", CMD_REF(informative)
            else
              {
                out << string(65, '-') << '\n';
@@ -196,7 +209,7 @@
  
                changes_summary csum;
  
-@@ -886,12 +933,21 @@ CMD(log, "log", "", CMD_REF(informative)
+@@ -892,12 +939,21 @@ CMD(log, "log", "", CMD_REF(informative)
  
                for (set<revision_id>::const_iterator anc = ancestors.begin();
                     anc != ancestors.end(); ++anc)
@@ -218,7 +231,7 @@
  
                if (!app.opts.no_files && !csum.cs.empty())
                  {
-@@ -901,7 +957,11 @@ CMD(log, "log", "", CMD_REF(informative)
+@@ -907,7 +963,11 @@ CMD(log, "log", "", CMD_REF(informative)
                  }
  
                log_certs(out, app, rid, changelog_name, "ChangeLog: ", true);
@@ -230,10 +243,11 @@
              }
  
            if (app.opts.diffs)
-============================================================
---- cmd_netsync.cc	ba4c038a24ffe3ba8951da91b859c426c5876571
-+++ cmd_netsync.cc	53c66eef7a2cf3c72f235095f960e0add60c8911
-@@ -180,7 +180,11 @@ CMD(pull, "pull", "", CMD_REF(network),
+===================================================================
+Index: cmd_netsync.cc
+--- cmd_netsync.cc	5f1360b0446a86c6e9fc646141a54e6e5a20dbe8
++++ cmd_netsync.cc	f8a1dbbcdfd3bd36740964c0095f6128ff2ba7ab
+@@ -179,7 +179,11 @@ CMD(pull, "pull", "", CMD_REF(network),
    find_key_if_needed(addr, include_pattern, exclude_pattern, app, false);
  
    if (app.opts.signing_key() == "")
@@ -243,9 +257,9 @@
      P(F("doing anonymous pull; use -kKEYNAME if you need authentication"));
 +#endif
  
-   run_netsync_protocol(client_voice, sink_role, addr,
-                        include_pattern, exclude_pattern, app);
-@@ -272,7 +276,11 @@ CMD(clone, "clone", "", CMD_REF(network)
+   std::list<utf8> uris;
+   uris.push_back(addr);
+@@ -277,7 +281,11 @@ CMD(clone, "clone", "", CMD_REF(network)
    app.create_workspace(workspace_dir);
  
    if (internal_db)
@@ -257,7 +271,7 @@
    else
      app.set_database(app.opts.dbname);
  
-@@ -300,7 +308,11 @@ CMD(clone, "clone", "", CMD_REF(network)
+@@ -299,7 +307,11 @@ CMD(clone, "clone", "", CMD_REF(network)
                       app, false);
  
    if (app.opts.signing_key() == "")
@@ -269,10 +283,26 @@
  
    if (!app.db.var_exists(default_include_pattern_key)
        || app.opts.set_default)
-============================================================
---- cmd_ws_commit.cc	b29545c7fd88a94d14d3b6955505e7e179c70d73
-+++ cmd_ws_commit.cc	4c9aa3fac75398d68f9f23838ee5559614694df5
-@@ -1337,7 +1337,11 @@ CMD_NO_WORKSPACE(import, "import", "", C
+===================================================================
+Index: cmd_ws_commit.cc
+--- cmd_ws_commit.cc	8321ee742a65e2ebaf58c328bdf6bdda11c8f21c
++++ cmd_ws_commit.cc	9a5206ea33d8580755038d375e7ca7779dc69877
+@@ -66,7 +66,14 @@ revision_summary(revision_t const & rev,
+ 
+       for (set<file_path>::const_iterator i = cs.dirs_added.begin();
+             i != cs.dirs_added.end(); ++i)
++#if defined(RSE) /* cosmetics-stat */
++        if ((*i) == file_path())
++            out += (F("  added    \"\"")).str() += '\n';
++        else
++            out += (F("  added    %s") % *i).str() += '\n';
++#else
+         out += (F("  added    %s") % *i).str() += '\n';
++#endif
+ 
+       for (map<file_path, file_id>::const_iterator i = cs.files_added.begin();
+             i != cs.files_added.end(); ++i)
+@@ -1349,7 +1356,11 @@ CMD_NO_WORKSPACE(import, "import", "", C
    catch (...)
      {
        // clean up before rethrowing
@@ -284,10 +314,11 @@
        throw;
      }
  
-============================================================
---- diff_patch.cc	943b5d68699b7ae6e06c5f335d8445cb961dabff
-+++ diff_patch.cc	318048c061524bb07d579c863722aa8bdd95b159
-@@ -1319,6 +1319,9 @@ make_diff(string const & filename1,
+===================================================================
+Index: diff_patch.cc
+--- diff_patch.cc	2016526a3148b6c23a04dd3c50b1af6f5f70a2fd
++++ diff_patch.cc	e634a994222ce41429f90f12c19b23c7782013d5
+@@ -1324,6 +1324,9 @@ make_diff(string const & filename1,
      {
        case unified_diff:
        {
@@ -297,7 +328,7 @@
          ost << "--- " << filename1 << '\t' << id1 << '\n';
          ost << "+++ " << filename2 << '\t' << id2 << '\n';
  
-@@ -1328,6 +1331,9 @@ make_diff(string const & filename1,
+@@ -1333,6 +1336,9 @@ make_diff(string const & filename1,
        }
        case context_diff:
        {
@@ -307,7 +338,8 @@
          ost << "*** " << filename1 << '\t' << id1 << '\n';
          ost << "--- " << filename2 << '\t' << id2 << '\n';
  
-============================================================
+===================================================================
+Index: file_io.cc
 --- file_io.cc	358fb964dc42e7f936a136342b93bb3a4744d1b3
 +++ file_io.cc	6b452acaa58ca24fa5611ea3e6e82e83a7cf7552
 @@ -398,16 +398,36 @@ write_data(file_path const & path, data 
@@ -347,10 +379,11 @@
  }
  
  void
-============================================================
---- lua_hooks.cc	1d95c581d5880c74fd9c941fd69e2564d624d2e2
-+++ lua_hooks.cc	cf4f72def48ec7c7a4847342365971ed356376ac
-@@ -144,7 +144,11 @@ lua_hooks::workspace_rcfilename(bookkeep
+===================================================================
+Index: lua_hooks.cc
+--- lua_hooks.cc	e61801cae30ad803e68f8419729619159719137a
++++ lua_hooks.cc	90e1266bafdac90484593fad2422ef2d3f6d4147
+@@ -162,7 +162,11 @@ lua_hooks::workspace_rcfilename(bookkeep
  void
  lua_hooks::workspace_rcfilename(bookkeeping_path & file)
  {
@@ -362,10 +395,11 @@
  }
  
  
-============================================================
---- monotone.cc	424f3537c4ae32633fe643e0e82bbb3b252722c7
-+++ monotone.cc	c4cd82fb52df543069cdfe4ff574ae74ac8f3efa
-@@ -220,12 +220,28 @@ cpp_main(int argc, char ** argv)
+===================================================================
+Index: monotone.cc
+--- monotone.cc	38b648aa00e33cc5bd36114cd92ba9c04879290e
++++ monotone.cc	b0d445153e03190779c99bc6da61cdcff5c7cdbf
+@@ -229,12 +229,28 @@ cpp_main(int argc, char ** argv)
                if (!app.opts.dbname.empty())
                  app.db.set_filename(app.opts.dbname);
              }
@@ -392,12 +426,13 @@
 +            }
 +#endif
  
-           // stop here if they asked for help
-           if (app.opts.help)
-============================================================
---- options_list.hh	54ee12e3dfb608ca3a4b9a64cc51a845fc4a0501
-+++ options_list.hh	b451bb8d5c5614e3ceb9b597267f7faab287e1fc
-@@ -200,6 +200,24 @@ OPTION(diff_options, no_show_encloser, f
+           // at this point we allow a workspace (meaning search for it
+           // and if found read _MTN/options, but don't use the data quite
+===================================================================
+Index: options_list.hh
+--- options_list.hh	e0359c1c2454708b66f9d7e6e613dc44953e1766
++++ options_list.hh	a4ef1088dad69309db69320d223cf9c168769fc5
+@@ -178,6 +178,24 @@ OPTION(diff_options, no_show_encloser, f
    no_show_encloser = true;
  }
  #endif
@@ -422,10 +457,11 @@
  
  OPT(diffs, "diffs", bool, false, gettext_noop("print diffs along with logs"))
  #ifdef option_bodies
-============================================================
---- paths.cc	9be0b0ca30c8a3bb03e47ee4bf021f807bf2edef
-+++ paths.cc	ef10a0dff0f701fee6a9eb1b94fc2767882fe1b5
-@@ -230,7 +230,11 @@ in_bookkeeping_dir(string const & path)
+===================================================================
+Index: paths.cc
+--- paths.cc	d850c3efae62041b8003589817387e5877f63b01
++++ paths.cc	30e8e5ea486bbbda2344474f7bfa86f0b152c438
+@@ -226,7 +226,11 @@ in_bookkeeping_dir(string const & path)
  static inline bool
  in_bookkeeping_dir(string const & path)
  {
@@ -437,7 +473,7 @@
      return false;
    if (path.size() == 1 || (path[1] != 'M' && path[1] != 'm'))
      return false;
-@@ -916,6 +920,9 @@ find_and_go_to_workspace(string const & 
+@@ -919,6 +923,9 @@ find_and_go_to_workspace(string const & 
    // first look for the current name of the bookkeeping directory.
    // if we don't find it, look for it under the old name, so that
    // migration has a chance to work.
@@ -447,12 +483,13 @@
    if (!find_bookdir(root, bookkeeping_root_component, current, removed))
      if (!find_bookdir(root, old_bookkeeping_root_component, current, removed))
        return false;
-============================================================
---- paths.hh	adf4ce1cbc60b1f05fb4555178f985648d0bf2c5
-+++ paths.hh	05e238ff3f0a98d90402bf5124f5d591bb0cf56a
-@@ -320,6 +320,15 @@ extern path_component const old_bookkeep
+===================================================================
+Index: paths.hh
+--- paths.hh	f37bdd30f00c3448268723a701924ca5b9450891
++++ paths.hh	9aa55788e3a3b521f75a5c4d1e318d9dc97cdd40
+@@ -325,6 +325,15 @@ private:
  // for migration
- extern path_component const old_bookkeeping_root_component;
+ #define old_bookkeeping_root_component (path_component("MT"))
  
 +#if defined(RSE) /* alt-book-keeping-root */
 +#ifndef MTN_ALT_BKROOT
@@ -466,7 +503,8 @@
  // this will always be an absolute path
  class system_path : public any_path
  {
-============================================================
+===================================================================
+Index: roster_merge.cc
 --- roster_merge.cc	5cbf793f50cf62a073ce837d337569d4ddb9475b
 +++ roster_merge.cc	2a0fa3fcf1d7fb60f0fdca0238d9bdbfc34cb1a1
 @@ -607,6 +607,20 @@ roster_merge(roster_t const & left_paren
@@ -490,9 +528,124 @@
      }
  }
  
-============================================================
---- work.cc	d602424dc046f080220d23b5dc663b93b573284a
-+++ work.cc	59a421adeac627d5e3591c39e2334c95be62ccff
+===================================================================
+Index: std_hooks.lua
+--- std_hooks.lua	a53348ca15431cc67266c65e6215640f6f55eee7
++++ std_hooks.lua	a22ecb0c807ba34a9c4a564fb0d86ce246e9e1c9
+@@ -284,6 +284,15 @@ function edit_comment(basetext, user_log
+    if user_log_message == "" or string.sub(user_log_message, -1) ~= "\n" then
+       tmp:write("\n")
+    end
++   --  #if defined(RSE) /* dot-mtn-message */
++   local template_log_message = read_contents_of_file(".mtn-message", "r")
++   if template_log_message ~= nil then
++      tmp:write(template_log_message)
++      if template_log_message == "" or string.sub(template_log_message, -1) ~= "\n" then
++         tmp:write("\n")
++      end
++   end
++   --  #endif
+    tmp:write(basetext)
+    io.close(tmp)
+ 
+@@ -1112,6 +1121,93 @@ end
+     return "socat"
+ end
+ 
++--  #if defined(RSE) /* extra-command */
++
++--  extra command: "mtn fuse REVISION"
++register_command(
++    "fuse", "REVISION",
++    "Fuse revision into workspace with conflict markers.",
++    "Fuse the specified revision into the current workspace by merging " ..
++    "the revision into the workspace while providing inline conflict " ..
++    "markers for manually resolving the conflicts in the workspace " ..
++    "before comitting the conflicts-resolved workspace as the new " ..
++    "merged revision.",
++    "command_fuse"
++)
++function command_fuse(revision)
++    if revision == nil then
++        io.stderr:write("mtn: fuse: ERROR: revision not given\n")
++        return
++    end
++    if program_exists_in_path("mtn") == 0 then
++        io.stderr:write("mtn: fuse: ERROR: require Monotone command \"mtn\" in PATH\n")
++        return
++    end
++    mtn_automate("get_option", "branch") -- make sure we have a valid workspace
++    local cmd =
++        "MTN_MERGE=diffutils " ..
++        "MTN_MERGE_DIFFUTILS=\"partial,diff3opts=-E\" " ..
++        "mtn " .. "merge_into_workspace " .. revision 
++    local rc = execute("sh", "-c", cmd)
++    if rc ~= 0 then
++        io.stderr:write("mtn: fuse: ERROR: failed to execute command \"" .. cmd .. "\"\n")
++    end
++end
++
++--  extra command: "mtn conflicts"
++register_command(
++    "conflicts", "",
++    "Lists files in workspace containing conflict markers.",
++    "Lists all files in the current workspace containing the " ..
++    "conflict markers produced by GNU diffutils' \"diff3\" " ..
++    "command. This indicates still unresolved merge conflicts.",
++    "command_conflicts"
++)
++function command_conflicts()
++    if program_exists_in_path("egrep") == 0 then
++        io.stderr:write("mtn: conflicts: ERROR: require GNU grep command \"egrep\" in PATH\n")
++        return
++    end
++    mtn_automate("get_option", "branch") -- make sure we have a valid workspace
++    local rc = execute(
++        "egrep",
++        "--files-with-matches",
++        "--recursive",
++        "^(<<<<<<<|=======|>>>>>>>) ",
++        "."
++    )
++end
++
++--  extra command: "mtn rev[ision] REVISION [ANCESTOR-REVISION]"
++register_command(
++    "revision", "REVISION [ANCESTOR-REVISION]",
++    "Shows summary information about revision(s)",
++    "Shows summary information about a particular revision " ..
++    "(or a range of revisions in case an ancestor revision is also specified). " ..
++    "This is just a convenience wrapper command around \"mtn log --diffs\".",
++    "command_revision"
++)
++alias_command(
++    "revision",
++    "rev"
++)
++function command_revision(revision, ancestor)
++    if revision == nil then
++        io.stderr:write("mtn: revision: ERROR: no revision specified\n")
++        return
++    end
++    if ancestor == nil then
++        ancestor = revision
++    end
++    mtn_automate("get_option", "branch") -- make sure we have a valid workspace
++    execute("mtn", "log", "--diffs", "--no-graph", "--from", ancestor, "--to", revision)
++    if rc ~= 0 then
++        io.stderr:write("mtn: revision: ERROR: failed to execute\n")
++    end
++end
++
++--  #endif
++
+ -- Netsync notifiers are tables containing 5 functions:
+ -- start, revision_received, cert_received, pubkey_received and end
+ -- Those functions take exactly the same arguments as the corresponding
+===================================================================
+Index: work.cc
+--- work.cc	04389e4274f38d0b2bc866c6938d53bbda5e8a2f
++++ work.cc	6eefd2d6271215c56bf601ce08485a9f0cd88e25
 @@ -53,28 +53,44 @@ get_revision_path(bookkeeping_path & m_p
  static void
  get_revision_path(bookkeeping_path & m_path)
@@ -538,7 +691,7 @@
    L(FL("inodeprints path is %s") % ip_path);
  }
  
-@@ -185,7 +201,11 @@ workspace::get_user_log_path(bookkeeping
+@@ -205,7 +221,11 @@ workspace::get_user_log_path(bookkeeping
  void
  workspace::get_user_log_path(bookkeeping_path & ul_path)
  {
@@ -550,7 +703,7 @@
    L(FL("user log path is %s") % ul_path);
  }
  
-@@ -367,7 +387,11 @@ workspace::get_local_dump_path(bookkeepi
+@@ -387,7 +407,11 @@ workspace::get_local_dump_path(bookkeepi
  void
  workspace::get_local_dump_path(bookkeeping_path & d_path)
  {
@@ -562,7 +715,7 @@
    L(FL("local dump path is %s") % d_path);
  }
  
-@@ -727,7 +751,11 @@ path_for_detached_nids()
+@@ -747,7 +771,11 @@ path_for_detached_nids()
  static inline bookkeeping_path
  path_for_detached_nids()
  {
@@ -574,7 +727,7 @@
  }
  
  static inline bookkeeping_path
-@@ -1542,9 +1570,15 @@ workspace::perform_pivot_root(file_path 
+@@ -1483,9 +1511,15 @@ workspace::perform_pivot_root(file_path 
    N(is_dir_t(new_roster.get_node(new_root)),
      F("proposed new root directory '%s' is not a directory") % new_root);
    {
@@ -590,7 +743,8 @@
    }
  
    {
-============================================================
+===================================================================
+Index: work_migration.cc
 --- work_migration.cc	3d58c3332cd195309eacf5cc52d4e88ad66a6c81
 +++ work_migration.cc	f044e25cc757899f97d413f3fe109a9bafe73553
 @@ -55,9 +55,18 @@ get_ws_format()

+ 2 - 2
monotone/monotone.spec

@@ -32,8 +32,8 @@ Distribution: OpenPKG Community
 Class:        EVAL
 Group:        SCM
 License:      GPL
-Version:      0.36
-Release:      20070918
+Version:      0.37
+Release:      20071026
 
 #   package options
 %option       with_rse  yes