monotone-commits-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Monotone-commits-diffs] net.venge.monotone: 09c2276fbcffdaca4bbb83d0f1f


From: code
Subject: [Monotone-commits-diffs] net.venge.monotone: 09c2276fbcffdaca4bbb83d0f1fcefa76da15d12
Date: Sat, 4 Aug 2012 14:26:30 +0200 (CEST)

revision:            09c2276fbcffdaca4bbb83d0f1fcefa76da15d12
date:                2012-08-04T12:25:05
author:              address@hidden
branch:              net.venge.monotone
changelog:
fix issue 210: diff treat files with mtn:manual_merge as binary

* src/cmd_diff_log.cc (dump_diff, dump_diffs): treat files with 
mtn:manual_merge as binary

* src/cmd_files.cc (CMD fdiff): match make_diff change

* src/diff_output.hh (make_diff):
* src/diff_output.cc (make_diff): add is_manual_merge

manifest:
format_version "1"

new_manifest [b75988544cf9518571645198acb191a1f3831715]

old_revision [806715c5ce888b7dbbce7752a7ff35868ee3bcfa]

patch "src/cmd_diff_log.cc"
 from [55dcbe5e40b8e706559f8b76a83b7fb81caecde1]
   to [73c7b3cba5a9e1af54ff98b44863c631289bfed4]

patch "src/cmd_files.cc"
 from [f15378efd25e597762776ad6e9c6f78c1a4ff191]
   to [35ef41ea62233513fe1aa54cedf8c70ade96973a]

patch "src/diff_output.cc"
 from [8df7c0bec2e64275f6c8e8b6ccb035c8fd0f684f]
   to [78be17ba28d6f26930b6ee36f04b4382450b912b]

patch "src/diff_output.hh"
 from [9125ccd0d0fa725782c9910b5f34e844048d2da8]
   to [905c550857ce361fd3e0da69840fd95860cc7874]
============================================================
--- src/cmd_diff_log.cc	55dcbe5e40b8e706559f8b76a83b7fb81caecde1
+++ src/cmd_diff_log.cc	73c7b3cba5a9e1af54ff98b44863c631289bfed4
@@ -1,4 +1,4 @@
-// Copyright (C) 2009, 2010 Stephen Leake <address@hidden>
+// Copyright (C) 2009, 2010, 2012 Stephen Leake <address@hidden>
 // Copyright (C) 2002 Graydon Hoare <address@hidden>
 //
 // This program is made available under the GNU GPL version 2.0 or
@@ -32,6 +32,7 @@
 #include "database.hh"
 #include "work.hh"
 #include "roster.hh"
+#include "vocab_cast.hh"
 
 using std::cout;
 using std::make_pair;
@@ -66,6 +67,7 @@ dump_diff(lua_hooks & lua,
           file_path const & left_path, file_path const & right_path,
           file_id const left_id, file_id const right_id,
           data const & left_data, data const & right_data,
+          bool is_manual_merge,
           diff_type const diff_format,
           bool external_diff_args_given,
           string external_diff_args,
@@ -74,9 +76,7 @@ dump_diff(lua_hooks & lua,
 {
   if (diff_format == external_diff)
     {
-      bool is_binary = false;
-      if (guess_binary(left_data()) || guess_binary(right_data()))
-        is_binary = true;
+      bool is_binary = is_manual_merge || guess_binary(left_data()) || guess_binary(right_data());
 
       file_path path = right_path;
       if (path.empty()) // use the left path for deletes
@@ -111,6 +111,7 @@ dump_diff(lua_hooks & lua,
       make_diff(left, right,
                 left_id, right_id,
                 left_data, right_data,
+                is_manual_merge,
                 output, diff_format, encloser);
     }
 
@@ -119,8 +120,9 @@ struct diff_node_data
 {
   file_path left_path;
   file_path right_path;
-  file_id left_id;
-  file_id right_id;
+  file_id   left_id;
+  file_id   right_id;
+  bool      is_manual_merge;
 };
 
 static void
@@ -139,6 +141,7 @@ dump_diffs(lua_hooks & lua,
   // Put all node data in a multimap with the file path of the node as key
   // which gets automatically sorted. For removed nodes the file path is
   // the left_path, for added, patched and renamed nodes it is the right_path.
+  attr_key manual_merge_key = typecast_vocab<attr_key>(utf8("mtn:manual_merge"));
   std::multimap<file_path, diff_node_data> path_node_data;
   parallel::iter<node_map> i(left_roster.all_nodes(), right_roster.all_nodes());
   while (i.next())
@@ -160,6 +163,8 @@ dump_diffs(lua_hooks & lua,
               dat.left_id = downcast_to_file_t(i.left_data())->content;
               // right_id is null
 
+              dat.is_manual_merge = (i.left_data()->attrs.find(manual_merge_key) != i.left_data()->attrs.end());
+
               path_node_data.insert(make_pair(dat.left_path, dat));
           }
           break;
@@ -175,6 +180,8 @@ dump_diffs(lua_hooks & lua,
               // left_id is null
               dat.right_id = downcast_to_file_t(i.right_data())->content;
 
+              dat.is_manual_merge = (i.right_data()->attrs.find(manual_merge_key) != i.right_data()->attrs.end());
+
               path_node_data.insert(make_pair(dat.right_path, dat));
             }
           break;
@@ -193,6 +200,10 @@ dump_diffs(lua_hooks & lua,
               left_roster.get_name(i.left_key(), dat.left_path);
               right_roster.get_name(i.right_key(), dat.right_path);
 
+              dat.is_manual_merge =
+                (i.left_data()->attrs.find(manual_merge_key) != i.left_data()->attrs.end()) or
+                (i.right_data()->attrs.find(manual_merge_key) != i.right_data()->attrs.end());
+
               path_node_data.insert(make_pair(dat.right_path, dat));
             }
           break;
@@ -219,6 +230,7 @@ dump_diffs(lua_hooks & lua,
                 dat.left_path, dat.right_path,
                 dat.left_id, dat.right_id,
                 left_data, right_data,
+                dat.is_manual_merge,
                 diff_format, external_diff_args_given, external_diff_args,
                 encloser, output);
     }
============================================================
--- src/cmd_files.cc	f15378efd25e597762776ad6e9c6f78c1a4ff191
+++ src/cmd_files.cc	35ef41ea62233513fe1aa54cedf8c70ade96973a
@@ -132,6 +132,7 @@ CMD(fdiff, "fdiff", "", CMD_REF(debug), 
   make_diff(src_name, dst_name,
             src_id, dst_id,
             src.inner(), dst.inner(),
+            false, // is_manual_merge
             cout, app.opts.diff_format, pattern);
 }
 
============================================================
--- src/diff_output.cc	8df7c0bec2e64275f6c8e8b6ccb035c8fd0f684f
+++ src/diff_output.cc	78be17ba28d6f26930b6ee36f04b4382450b912b
@@ -1,5 +1,5 @@
 // Copyright (C) 2002 Graydon Hoare <address@hidden>
-//               2008 Stephen Leake <address@hidden>
+//               2008, 2012 Stephen Leake <address@hidden>
 //
 // This program is made available under the GNU GPL version 2.0 or
 // greater. See the accompanying file COPYING for details.
@@ -469,11 +469,12 @@ make_diff(string const & filename1,
           file_id const & id2,
           data const & data1,
           data const & data2,
+          bool is_manual_merge,
           ostream & ost,
           diff_type type,
           string const & pattern)
 {
-  if (guess_binary(data1()) || guess_binary(data2()))
+  if (is_manual_merge || guess_binary(data1()) || guess_binary(data2()))
     {
       // If a file has been removed, filename2 will be "/dev/null".
       // It doesn't make sense to output that.
============================================================
--- src/diff_output.hh	9125ccd0d0fa725782c9910b5f34e844048d2da8
+++ src/diff_output.hh	905c550857ce361fd3e0da69840fd95860cc7874
@@ -1,5 +1,5 @@
 // Copyright (C) 2002 Graydon Hoare <address@hidden>
-//               2008 Stephen Leake <address@hidden>
+//               2008, 2012 Stephen Leake <address@hidden>
 //
 // This program is made available under the GNU GPL version 2.0 or
 // greater. See the accompanying file COPYING for details.
@@ -22,6 +22,7 @@ void make_diff(std::string const & filen
                file_id const & id2,
                data const & data1,
                data const & data2,
+               bool is_manual_merge,
                std::ostream & ost,
                diff_type type,
                std::string const & pattern);

reply via email to

[Prev in Thread] Current Thread [Next in Thread]