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.colored-diff: 0023a9dead1bbc


From: code
Subject: [Monotone-commits-diffs] net.venge.monotone.colored-diff: 0023a9dead1bbc0354008a529f7abf96f10c73e8
Date: Mon, 11 Apr 2011 22:45:19 +0200 (CEST)

revision:            0023a9dead1bbc0354008a529f7abf96f10c73e8
date:                2011-04-10T21:56:09
author:              Richard Hopkins <address@hidden>
branch:              net.venge.monotone.colored-diff
changelog:
Fixed colorized output of "mtn status"

The recent changes to allow colorization under Win32 caused output to break
due to some output being buffered separately from cout. This commit fixes
the output of "mtn status" with --no-colorize and --colorize options.

manifest:
format_version "1"

new_manifest [4311d1c4980dd1f6cd5f68243ca2845e03f95fe5]

old_revision [3574c6eedde8ff607f303be67dda04048f882e13]

patch "src/cmd_diff_log.cc"
 from [7cf82371ca7a3c7088a405c56cd1d0a933bc9b0f]
   to [a777dfeab40d7ce6498295026a751e545582688a]

patch "src/colorizer.hh"
 from [68b9d31fbec0de86d5dca156523fae34e684845c]
   to [22dc6d5552c8ab0c59a918ca54f1e2273fb813cb]

patch "src/rev_output.cc"
 from [fec6728d80bca2d8d13ab49bb4ecd03310879fe5]
   to [ccf235daf27df22af61326c746170ff3fccb075a]
============================================================
--- src/cmd_diff_log.cc	7cf82371ca7a3c7088a405c56cd1d0a933bc9b0f
+++ src/cmd_diff_log.cc	a777dfeab40d7ce6498295026a751e545582688a
@@ -165,7 +165,7 @@ dump_diffs(lua_hooks & lua,
               // right_id is null
 
               path_node_data.insert(make_pair(dat.left_path, dat));
-          }
+            }
           break;
 
         case parallel::in_right:
@@ -204,7 +204,7 @@ dump_diffs(lua_hooks & lua,
     }
 
   for (std::multimap<file_path, diff_node_data>::iterator i = path_node_data.begin();
-         i != path_node_data.end(); ++i)
+       i != path_node_data.end(); ++i)
     {
       diff_node_data & dat = (*i).second;
       data left_data, right_data;
@@ -553,20 +553,20 @@ struct rev_cmp
   }
 };
 
-typedef priority_queue<pair<rev_height, revision_id>,
-                       vector<pair<rev_height, revision_id> >,
-                       rev_cmp> frontier_t;
+typedef priority_queue < pair<rev_height, revision_id>,
+        vector<pair<rev_height, revision_id> >,
+        rev_cmp > frontier_t;
 
 void
-log_print_rev (app_state &      app,
-               database &       db,
-               project_t &      project,
+log_print_rev (app_state    &   app,
+               database    &    db,
+               project_t    &   project,
                revision_id      rid,
-               revision_t &     rev,
+               revision_t   &   rev,
                string           date_fmt,
                node_restriction mask,
                colorizer const & color,
-               ostream &        out)
+               ostream     &    out)
 {
   cert_name const author_name(author_cert_name);
   cert_name const date_name(date_cert_name);
@@ -579,18 +579,18 @@ log_print_rev (app_state &      app,
 
   if (app.opts.brief)
     {
-      out << color.colorize(encode_hexenc(rid.inner()(), rid.inner().made_from),
-                            colorizer::log_revision);
-      log_certs(certs, out, author_name);
+      color.get_ostream() << color.colorize(encode_hexenc(rid.inner()(), rid.inner().made_from),
+                                            colorizer::log_revision);
+      log_certs(certs, color.get_ostream(), author_name);
       if (app.opts.no_graph)
-        log_certs(certs, out, date_name, date_fmt);
+        log_certs(certs, color.get_ostream(), date_name, date_fmt);
       else
         {
-          out << '\n';
-          log_certs(certs, out, date_name, date_fmt);
+          color.get_ostream() << '\n';
+          log_certs(certs, color.get_ostream(), date_name, date_fmt);
         }
-      log_certs(certs, out, branch_name);
-      out << '\n';
+      log_certs(certs, color.get_ostream(), branch_name);
+      color.get_ostream() << '\n';
     }
   else
     {
@@ -599,7 +599,7 @@ log_print_rev (app_state &      app,
 
       external header_external;
       utf8_to_system_best_effort(header, header_external);
-      out << header_external;
+      color.get_ostream() << header_external;
 
       if (!app.opts.no_files)
         {
@@ -607,7 +607,7 @@ log_print_rev (app_state &      app,
           revision_summary(rev, color, summary);
           external summary_external;
           utf8_to_system_best_effort(summary, summary_external);
-          out << summary_external;
+          color.get_ostream() << summary_external;
         }
     }
 
@@ -632,7 +632,7 @@ log_print_rev (app_state &      app,
                                  restricted_roster, mask);
 
           dump_diffs(app.lua, db, parent_roster, restricted_roster,
-                     out, app.opts.diff_format,
+                     color.get_ostream(), app.opts.diff_format,
                      app.opts.external_diff_args_given,
                      app.opts.external_diff_args,
                      true, true,
@@ -684,16 +684,19 @@ log_common (app_state & app,
            i != rev.edges.end(); i++)
         {
           revision_id rid = edge_old_revision(i);
-          if ((FL("%s") % rid).str().empty()) {
-            W(F("workspace has no parent revision, probably an empty branch"));
-          } else {
-            E(db.revision_exists(rid), origin::user,
-              F("workspace parent revision %s not found - "
-                "did you specify a wrong database?") % rid);
-            starting_revs.insert(rid);
-            if (i == rev.edges.begin())
-              first_rid = rid;
-          }
+          if ((FL("%s") % rid).str().empty())
+            {
+              W(F("workspace has no parent revision, probably an empty branch"));
+            }
+          else
+            {
+              E(db.revision_exists(rid), origin::user,
+                F("workspace parent revision %s not found - "
+                  "did you specify a wrong database?") % rid);
+              starting_revs.insert(rid);
+              if (i == rev.edges.begin())
+                first_rid = rid;
+            }
         }
     }
   else if (!app.opts.from.empty())
@@ -902,7 +905,7 @@ log_common (app_state & app,
                   marked_revs.insert(marks->parent_name.begin(),
                                      marks->parent_name.end());
                   for (map<attr_key, set<revision_id> >::const_iterator
-                         a = marks->attrs.begin(); a != marks->attrs.end(); ++a)
+                       a = marks->attrs.begin(); a != marks->attrs.end(); ++a)
                     marked_revs.insert(a->second.begin(), a->second.end());
                 }
             }
@@ -932,7 +935,7 @@ log_common (app_state & app,
       if (app.opts.no_merges && rev.is_merge_node())
         print_this = false;
       else if (!app.opts.revision.empty() &&
-          selected_revs.find(rid) == selected_revs.end())
+               selected_revs.find(rid) == selected_revs.end())
         print_this = false;
 
       set<revision_id> interesting;
@@ -1016,10 +1019,10 @@ CMD_AUTOMATE(log, N_("[PATH] ..."),
 CMD_AUTOMATE(log, N_("[PATH] ..."),
              N_("Lists the selected revision history"),
              "",
-    options::opts::last | options::opts::next |
-    options::opts::from | options::opts::to |
-    options::opts::depth | options::opts::exclude |
-    options::opts::no_merges)
+             options::opts::last | options::opts::next |
+             options::opts::from | options::opts::to |
+             options::opts::depth | options::opts::exclude |
+             options::opts::no_merges)
 {
   log_common (app, args, true, output);
 }
============================================================
--- src/rev_output.cc	fec6728d80bca2d8d13ab49bb4ecd03310879fe5
+++ src/rev_output.cc	ccf235daf27df22af61326c746170ff3fccb075a
@@ -55,16 +55,15 @@ revision_header(revision_id const rid, r
                 vector<cert> const & certs, string const & date_fmt,
                 colorizer const & color, utf8 & header)
 {
-  ostringstream out;
+  color.get_ostream() << color.colorize(string(70, '-'),
+                                        colorizer::log_revision) << '\n';
+  color.get_ostream() << color.colorize(_("Revision: "), colorizer::rev_header) << rid << '\n';
 
-  out << color.colorize(string(70, '-'), colorizer::log_revision) << '\n'
-      << color.colorize(_("Revision: "), colorizer::rev_header) << rid << '\n';
-
   for (edge_map::const_iterator i = rev.edges.begin(); i != rev.edges.end(); ++i)
     {
       revision_id parent = edge_old_revision(*i);
       if (!null_id(parent))
-        out << color.colorize(_("Parent:   "), colorizer::rev_header) << parent << '\n';
+        color.get_ostream() << color.colorize(_("Parent:   "), colorizer::rev_header) << parent << '\n';
     }
 
   cert_name const author(author_cert_name);
@@ -76,54 +75,52 @@ revision_header(revision_id const rid, r
 
   for (vector<cert>::const_iterator i = certs.begin(); i != certs.end(); ++i)
     if (i->name == author)
-      out << color.colorize(_("Author:   "), colorizer::rev_header)
-          << i->value << '\n';
+      color.get_ostream() << color.colorize(_("Author:   "), colorizer::rev_header)
+                          << i->value << '\n';
 
   for (vector<cert>::const_iterator i = certs.begin(); i != certs.end(); ++i)
     if (i->name == date)
       {
         if (date_fmt.empty())
-          out << color.colorize(_("Date:     "), colorizer::rev_header)
-              << i->value << '\n';
+          color.get_ostream() << color.colorize(_("Date:     "), colorizer::rev_header)
+                              << i->value << '\n';
         else
           {
             date_t date(i->value());
-            out << color.colorize(_("Date:     "), colorizer::rev_header)
-                << date.as_formatted_localtime(date_fmt) << '\n';
+            color.get_ostream() << color.colorize(_("Date:     "), colorizer::rev_header)
+                                << date.as_formatted_localtime(date_fmt) << '\n';
           }
       }
 
   for (vector<cert>::const_iterator i = certs.begin(); i != certs.end(); ++i)
     if (i->name == branch)
-      out << color.colorize(_("Branch:   "), colorizer::rev_header)
-          << i->value << '\n';
+      color.get_ostream() << color.colorize(_("Branch:   "), colorizer::rev_header)
+                          << i->value << '\n';
 
   for (vector<cert>::const_iterator i = certs.begin(); i != certs.end(); ++i)
     if (i->name == tag)
-      out << color.colorize(_("Tag:      "), colorizer::rev_header)
-          << i->value << '\n';
+      color.get_ostream() << color.colorize(_("Tag:      "), colorizer::rev_header)
+                          << i->value << '\n';
 
-  out << "\n";
+  color.get_ostream() << "\n";
 
   for (vector<cert>::const_iterator i = certs.begin(); i != certs.end(); ++i)
     if (i->name == changelog)
       {
-        out << color.colorize(_("Changelog: "), colorizer::rev_header) << "\n\n"
-            << i->value << '\n';
+        color.get_ostream() << color.colorize(_("Changelog: "), colorizer::rev_header) << "\n\n"
+                            << i->value << '\n';
         if (!i->value().empty() && i->value()[i->value().length()-1] != '\n')
-          out << '\n';
+          color.get_ostream() << '\n';
       }
 
   for (vector<cert>::const_iterator i = certs.begin(); i != certs.end(); ++i)
     if (i->name == comment)
       {
-        out << color.colorize(_("Comments: "), colorizer::rev_header) << "\n\n"
-            << i->value << '\n';
+        color.get_ostream() << color.colorize(_("Comments: "), colorizer::rev_header) << "\n\n"
+                            << i->value << '\n';
         if (!i->value().empty() && i->value()[i->value().length()-1] != '\n')
-          out << '\n';
+          color.get_ostream() << '\n';
       }
-
-  header = utf8(out.str(), origin::internal);
 }
 
 void
@@ -133,7 +130,6 @@ revision_summary(revision_t const & rev,
   // strings here, for consistency with newline conventions used by most
   // other format strings.
 
-  ostringstream out;
   revision_id rid;
   calculate_ident(rev, rid);
 
@@ -145,50 +141,50 @@ revision_summary(revision_t const & rev,
       // A colon at the end of this string looked nicer, but it made
       // double-click copying from terminals annoying.
       if (null_id(parent))
-        out << color.colorize(_("Changes"), colorizer::rev_header) << "\n\n";
+        color.get_ostream() << color.colorize(_("Changes"), colorizer::rev_header) << "\n\n";
       else
-        out << color.colorize(_("Changes against parent "), colorizer::rev_header) << parent << "\n\n";
+        color.get_ostream() << color.colorize(_("Changes against parent "), colorizer::rev_header) << parent << "\n\n";
 
       // presumably a merge rev could have an empty edge if one side won
       if (cs.empty())
-        out << _("no changes") << '\n';
+        color.get_ostream() << _("no changes") << '\n';
 
       for (set<file_path>::const_iterator i = cs.nodes_deleted.begin();
-            i != cs.nodes_deleted.end(); ++i)
-        out << color.colorize((F("  dropped  %s") %*i).str(),
-                              colorizer::remove) << '\n';
+           i != cs.nodes_deleted.end(); ++i)
+        color.get_ostream() << color.colorize((F("  dropped  %s") % *i).str(),
+                                              colorizer::remove) << '\n';
 
       for (map<file_path, file_path>::const_iterator
-            i = cs.nodes_renamed.begin();
-            i != cs.nodes_renamed.end(); ++i)
-        out << color.colorize((F("  renamed  %s\n"
-                                 "       to  %s") % i->first
-                                 % i->second).str(),
-                              colorizer::rename) << '\n';
+           i = cs.nodes_renamed.begin();
+           i != cs.nodes_renamed.end(); ++i)
+        color.get_ostream() << color.colorize((F("  renamed  %s\n"
+                                                 "       to  %s") % i->first
+                                               % i->second).str(),
+                                              colorizer::rename) << '\n';
 
       for (set<file_path>::const_iterator i = cs.dirs_added.begin();
-            i != cs.dirs_added.end(); ++i)
-        out << color.colorize((F("  added    %s") % *i).str(),
-                              colorizer::add) << '\n';
+           i != cs.dirs_added.end(); ++i)
+        color.get_ostream() << color.colorize((F("  added    %s") % *i).str(),
+                                              colorizer::add) << '\n';
 
       for (map<file_path, file_id>::const_iterator i = cs.files_added.begin();
-            i != cs.files_added.end(); ++i)
-        out << color.colorize((F("  added    %s") % i->first).str(),
-                              colorizer::add) << '\n';
+           i != cs.files_added.end(); ++i)
+        color.get_ostream() << color.colorize((F("  added    %s") % i->first).str(),
+                                              colorizer::add) << '\n';
 
       for (map<file_path, pair<file_id, file_id> >::const_iterator
-              i = cs.deltas_applied.begin(); i != cs.deltas_applied.end(); ++i)
-        out << color.colorize((F("  patched  %s") % i->first).str(),
-                              colorizer::change) << '\n';
+           i = cs.deltas_applied.begin(); i != cs.deltas_applied.end(); ++i)
+        color.get_ostream() << color.colorize((F("  patched  %s") % i->first).str(),
+                                              colorizer::change) << '\n';
 
       for (map<pair<file_path, attr_key>, attr_value >::const_iterator
-             i = cs.attrs_set.begin(); i != cs.attrs_set.end(); ++i)
-        out << color.colorize((F("  attr on  %s\n"
-                                 "      set  %s\n"
-                                 "       to  %s")
-                               % i->first.first % i->first.second
-                               % i->second).str(),
-                              colorizer::set) << '\n';
+           i = cs.attrs_set.begin(); i != cs.attrs_set.end(); ++i)
+        color.get_ostream() << color.colorize((F("  attr on  %s\n"
+                                                 "      set  %s\n"
+                                                 "       to  %s")
+                                               % i->first.first % i->first.second
+                                               % i->second).str(),
+                                              colorizer::set) << '\n';
 
       // FIXME: naming here could not be more inconsistent
       // the cset calls it attrs_cleared
@@ -197,15 +193,14 @@ revision_summary(revision_t const & rev,
       // the revision text uses attr clear
 
       for (set<pair<file_path, attr_key> >::const_iterator
-             i = cs.attrs_cleared.begin(); i != cs.attrs_cleared.end(); ++i)
-        out << color.colorize((F("  attr on  %s\n"
-                                 "    unset  %s") % i->first
-                                 % i->second).str(),
-                              colorizer::unset) << '\n';
+           i = cs.attrs_cleared.begin(); i != cs.attrs_cleared.end(); ++i)
+        color.get_ostream() << color.colorize((F("  attr on  %s\n"
+                                                 "    unset  %s") % i->first
+                                               % i->second).str(),
+                                              colorizer::unset) << '\n';
 
-      out << '\n';
+      color.get_ostream() << '\n';
     }
-  summary = utf8(out.str(), origin::internal);
 }
 
 // Local Variables:
============================================================
--- src/colorizer.hh	68b9d31fbec0de86d5dca156523fae34e684845c
+++ src/colorizer.hh	22dc6d5552c8ab0c59a918ca54f1e2273fb813cb
@@ -43,7 +43,7 @@ struct colorizer
   std::string
   colorize(std::string const & in, purpose p = normal) const;
 
-  std::ostream const & get_ostream() const { return out; }
+  std::ostream & get_ostream() const { return out; }
 
 private:
 #ifdef WIN32

reply via email to

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