We've got a copy of (cleaned up) argv[0] in two places - ui.prog_name
and app.prog_name. This is silly. It seems to me that argv[0] is,
like clog, the sort of thing there is only ever one of, and so it
belongs in the ui object, not the app object. (also, in branches i
have code that would like not to pass app around, but needs it _just_
for prog_name. :)
so here's the patch that makes it so. also i removed some junk code
from monotone.cc -- it looks like it came back in the bpo merge.
zw
#
# old_revision [3dfd6e2f7ba8a63a6a33de8e1f48a6c7714c61d3]
#
# patch "app_state.cc"
# from [b6b5c4ce81c896c9ec30ae1ce7a2566544ea9604]
# to [1ac11de8b02eac2df5ed4828d67c287808764a57]
#
# patch "app_state.hh"
# from [d29cbc5965798994b564e7841752d1b7159d33b1]
# to [7f0282fa78e9b84649b9793df28cd184c176bd3d]
#
# patch "cmd_merging.cc"
# from [3eb23261c6e8c791574c49e100a40f4ccf15e4ab]
# to [1814c5fb1a19405e7317492702678a0860532fec]
#
# patch "cmd_ws_commit.cc"
# from [970eb21298fe1bea992478c5b97455bbd34a2159]
# to [2fb3d9649e5febe36820b0603140fc4686963606]
#
# patch "commands.cc"
# from [79edb01e23e7bac3b6b0c8096687f6309e2d4ed9]
# to [e47c715e0d008366d4b473ec02410c88b264ecd1]
#
# patch "database.cc"
# from [7f4dd6f538de13dbc1c35c3bd9a2f6966250fa69]
# to [083ddf93278561d25ed5ad2aa5e63240fb0b1000]
#
# patch "monotone.cc"
# from [17b0f570b6adf772aa4a603e94ba1dfda1992db1]
# to [2cc94ffaf349a01352665203bf5308ed239d20e6]
#
# patch "netsync.cc"
# from [f0700b1fdfefd473485be59bc572f4153ce72bab]
# to [816746f3fc709badab6c8082986cbf18fe1e995f]
#
# patch "roster.cc"
# from [d03806d489e8b30fc4564b9a4f025669770403d6]
# to [bd80eae12d6628fe93c1963e09201a2957ac1bd8]
#
# patch "ui.cc"
# from [75ec26afdc2f781818facabaf95ea615e76f5737]
# to [359b41c16854dc2b42a42449e9613079f1a95949]
#
# patch "ui.hh"
# from [7b8cd80da4eb57f413e10d25b812e9ae16353fae]
# to [ea2c11aaa5de4bc00851ee8bb7a9730f509c93fc]
#
============================================================
--- app_state.cc b6b5c4ce81c896c9ec30ae1ce7a2566544ea9604
+++ app_state.cc 1ac11de8b02eac2df5ed4828d67c287808764a57
@@ -61,7 +61,6 @@ app_state::app_state()
db.set_app(this);
lua.set_app(this);
keys.set_key_dir(confdir / "keys");
- set_prog_name(utf8(string("mtn")));
}
app_state::~app_state()
@@ -360,13 +359,6 @@ void
}
void
-app_state::set_prog_name(utf8 const & name)
-{
- prog_name = name;
- ui.set_prog_name(name());
-}
-
-void
app_state::add_rcfile(utf8 const & filename)
{
extra_rcfiles.push_back(filename);
============================================================
--- app_state.hh d29cbc5965798994b564e7841752d1b7159d33b1
+++ app_state.hh 7f0282fa78e9b84649b9793df28cd184c176bd3d
@@ -140,7 +140,6 @@ public:
void set_diff_args(utf8 const & args);
void add_key_to_push(utf8 const & key);
void set_recursive(bool r = true);
- void set_prog_name(utf8 const & prog_name);
void set_stdhooks(bool b);
void set_rcfiles(bool b);
@@ -154,10 +153,6 @@ public:
explicit app_state();
~app_state();
- // Only use set_prog_name to set this; changes need to be propagated
- // to the global ui object.
- utf8 prog_name;
-
private:
void load_rcfiles();
void read_options();
============================================================
--- cmd_merging.cc 3eb23261c6e8c791574c49e100a40f4ccf15e4ab
+++ cmd_merging.cc 1814c5fb1a19405e7317492702678a0860532fec
@@ -136,7 +136,7 @@ CMD(update, N_("workspace"), "",
for (set<revision_id>::const_iterator i = candidates.begin();
i != candidates.end(); ++i)
P(i18n_format(" %s") % describe_revision(app, *i));
- P(F("choose one with '%s update -r<id>'") % app.prog_name);
+ P(F("choose one with '%s update -r<id>'") % ui.prog_name);
E(false, F("multiple update candidates remain after selection"));
}
chosen_rid = *(candidates.begin());
@@ -706,7 +706,7 @@ CMD(pluck, N_("workspace"), N_("[-r FROM
"to apply the changes relative to one of its parents, use:\n"
" %s pluck -r PARENT -r %s")
% to_rid
- % app.prog_name % to_rid);
+ % ui.prog_name % to_rid);
from_rid = *parents.begin();
}
else if (app.revision_selectors.size() == 2)
============================================================
--- cmd_ws_commit.cc 970eb21298fe1bea992478c5b97455bbd34a2159
+++ cmd_ws_commit.cc 2fb3d9649e5febe36820b0603140fc4686963606
@@ -428,7 +428,7 @@ CMD(checkout, N_("tree"), N_("[DIRECTORY
P(F("branch %s has multiple heads:") % app.branch_name);
for (set<revision_id>::const_iterator i = heads.begin(); i != heads.end(); ++i)
P(i18n_format(" %s") % describe_revision(app, *i));
- P(F("choose one with '%s checkout -r<id>'") % app.prog_name);
+ P(F("choose one with '%s checkout -r<id>'") % ui.prog_name);
E(false, F("branch %s has multiple heads") % app.branch_name);
}
ident = *(heads.begin());
@@ -842,7 +842,7 @@ CMD(commit, N_("workspace"), N_("[PATH].
if (heads.size() > old_head_size && old_head_size > 0) {
P(F("note: this revision creates divergence\n"
"note: you may (or may not) wish to run '%s merge'")
- % app.prog_name);
+ % ui.prog_name);
}
update_any_attrs(app);
============================================================
--- commands.cc 79edb01e23e7bac3b6b0c8096687f6309e2d4ed9
+++ commands.cc e47c715e0d008366d4b473ec02410c88b264ecd1
@@ -15,7 +15,7 @@
#include "charset.hh"
#include "inodeprint.hh"
#include "cert.hh"
-
+#include "ui.hh"
#include "cmd.hh"
#ifndef _WIN32
@@ -486,7 +486,7 @@ notify_if_multiple_heads(app_state & app
_("branch '%s' has multiple heads\n"
"perhaps consider '%s merge'"),
prefixedline);
- P(i18n_format(prefixedline) % app.branch_name % app.prog_name);
+ P(i18n_format(prefixedline) % app.branch_name % ui.prog_name);
}
}
============================================================
--- database.cc 7f4dd6f538de13dbc1c35c3bd9a2f6966250fa69
+++ database.cc 083ddf93278561d25ed5ad2aa5e63240fb0b1000
@@ -158,7 +158,7 @@ database::check_schema()
"wanted schema %s, got %s\n"
"try '%s db migrate' to upgrade\n"
"(this is irreversible; you may want to make a backup copy first)")
- % filename % schema % db_schema_id % __app->prog_name);
+ % filename % schema % db_schema_id % ui.prog_name);
}
void
============================================================
--- monotone.cc 17b0f570b6adf772aa4a603e94ba1dfda1992db1
+++ monotone.cc 2cc94ffaf349a01352665203bf5308ed239d20e6
@@ -107,45 +107,6 @@ struct ui_library
}
};
-
-#if 0 // FIXME! need b::po equiv.
-// Read arguments from a file. The special file '-' means stdin.
-// Returned value must be free()'d, after arg parsing has completed.
-static void
-my_poptStuffArgFile(poptContext con, utf8 const & filename)
-{
- utf8 argstr;
- {
- data dat;
- read_data_for_command_line(filename, dat);
- external ext(dat());
- system_to_utf8(ext, argstr);
- }
-
- const char **argv = 0;
- int argc = 0;
- int rc;
-
- // Parse the string. It's OK if there are no arguments.
- rc = poptParseArgvString(argstr().c_str(), &argc, &argv);
- N(rc >= 0 || rc == POPT_ERROR_NOARG,
- F("problem parsing arguments from file %s: %s")
- % filename % poptStrerror(rc));
-
- if (rc != POPT_ERROR_NOARG)
- {
- // poptStuffArgs does not take an argc argument, but rather requires that
- // the argv array be null-terminated.
- I(argv[argc] == NULL);
- N((rc = poptStuffArgs(con, argv)) >= 0,
- F("weird error when stuffing arguments read from %s: %s\n")
- % filename % poptStrerror(rc));
- }
-
- free(argv);
-}
-#endif
-
void
tokenize_for_command_line(string const & from, vector<string> & to)
{
@@ -240,61 +201,35 @@ cpp_main(int argc, char ** argv)
// Set up secure memory allocation etc
botan_library acquire_botan;
- // set up some marked strings, so even if our logbuf overflows, we'll get
- // this data in a crash.
- string cmdline_string;
- {
- ostringstream cmdline_ss;
- for (int i = 0; i < argc; ++i)
- {
- if (i)
- cmdline_ss << ", ";
- cmdline_ss << "'" << argv[i] << "'";
- }
- cmdline_string = cmdline_ss.str();
- }
- MM(cmdline_string);
- L(FL("command line: %s\n") % cmdline_string);
+ // Record where we are. This has to happen before any use of
+ // boost::filesystem.
+ save_initial_path();
- string locale_string = (setlocale(LC_ALL, NULL) == NULL ? "n/a" : setlocale(LC_ALL, NULL));
- MM(locale_string);
- L(FL("set locale: LC_ALL=%s\n") % locale_string);
-
- string full_version_string;
- get_full_version(full_version_string);
- MM(full_version_string);
-
- // Set up secure memory allocation etc
- Botan::Init::initialize();
- Botan::set_default_allocator("malloc");
-
// decode all argv values into a UTF-8 array
- save_initial_path();
vector<string> args;
- utf8 progname;
- for (int i = 0; i < argc; ++i)
+ for (int i = 1; i < argc; ++i)
{
external ex(argv[i]);
utf8 ut;
system_to_utf8(ex, ut);
- if (i)
- args.push_back(ut());
- else
- progname = ut;
+ args.push_back(ut());
}
- // find base name of executable
- string prog_path = fs::path(progname()).leaf();
- if (prog_path.rfind(".exe") == prog_path.size() - 4)
- prog_path = prog_path.substr(0, prog_path.size() - 4);
- utf8 prog_name(prog_path);
+ // find base name of executable, convert to utf8, and save it in the
+ // global ui object
+ {
+ string prog_name = fs::path(argv[0]).leaf();
+ if (prog_name.rfind(".exe") == prog_name.size() - 4)
+ prog_name = prog_name.substr(0, prog_name.size() - 4);
+ utf8 prog_name_u;
+ system_to_utf8(prog_name, prog_name_u);
+ ui.prog_name = prog_name_u();
+ I(!ui.prog_name.empty());
+ }
app_state app;
try
{
-
- app.set_prog_name(prog_name);
-
// set up for parsing. we add a hidden argument that collections all
// positional arguments, which we process ourselves in a moment.
po::options_description all_options;
@@ -729,12 +664,12 @@ cpp_main(int argc, char ** argv)
po::options_description cmd_options_desc = commands::command_options(u.which);
unsigned count = cmd_options_desc.options().size();
- cout << F("Usage: %s [OPTION...] command [ARG...]") % prog_name << "\n\n";
+ cout << F("Usage: %s [OPTION...] command [ARG...]") % ui.prog_name << "\n\n";
cout << option::global_options << "\n";
if (count > 0)
{
- cout << F("Options specific to '%s %s':") % prog_name % u.which << "\n\n";
+ cout << F("Options specific to '%s %s':") % ui.prog_name % u.which << "\n\n";
cout << cmd_options_desc << "\n";
}
============================================================
--- netsync.cc f0700b1fdfefd473485be59bc572f4153ce72bab
+++ netsync.cc 816746f3fc709badab6c8082986cbf18fe1e995f
@@ -1242,7 +1242,7 @@ session::process_hello_cmd(rsa_keypair_i
"I expected %s\n"
"'%s unset %s %s' overrides this check")
% their_key_hash % expected_key_hash
- % app.prog_name % their_key_key.first % their_key_key.second);
+ % ui.prog_name % their_key_key.first % their_key_key.second);
E(false, F("server key changed"));
}
}
============================================================
--- roster.cc d03806d489e8b30fc4564b9a4f025669770403d6
+++ roster.cc bd80eae12d6628fe93c1963e09201a2957ac1bd8
@@ -28,6 +28,7 @@
#include "parallel_iter.hh"
#include "restrictions.hh"
#include "safe_map.hh"
+#include "ui.hh"
#include <boost/lexical_cast.hpp>
@@ -2338,8 +2339,8 @@ update_current_roster_from_filesystem(ro
"'%s revert FILE' to restore it\n"
"or to handle all at once, simply '%s drop --missing'\n"
"or '%s revert --missing'")
- % missing_files % app.prog_name % app.prog_name % app.prog_name
- % app.prog_name % app.prog_name);
+ % missing_files % ui.prog_name % ui.prog_name % ui.prog_name
+ % ui.prog_name % ui.prog_name);
}
void
============================================================
--- ui.cc 75ec26afdc2f781818facabaf95ea615e76f5737
+++ ui.cc 359b41c16854dc2b42a42449e9613079f1a95949
@@ -397,6 +397,7 @@ user_interface::user_interface() :
// any real work. see monotone.cc for how this is handled.
user_interface::user_interface() :
+ prog_name("?"),
last_write_was_a_tick(false),
t_writer(0)
{}
@@ -530,13 +531,6 @@ user_interface::fatal_exception()
this->fatal("exception of unknown type");
}
-void
-user_interface::set_prog_name(string const & name)
-{
- prog_name = name;
- I(!prog_name.empty());
-}
-
string
user_interface::output_prefix()
{
============================================================
--- ui.hh 7b8cd80da4eb57f413e10d25b812e9ae16353fae
+++ ui.hh ea2c11aaa5de4bc00851ee8bb7a9730f509c93fc
@@ -104,8 +104,8 @@ public:
void ensure_clean_line();
void redirect_log_to(system_path const & filename);
- void set_prog_name(std::string const & name);
std::string output_prefix();
+ std::string prog_name;
private:
std::set<std::string> issued_warnings;
@@ -118,8 +118,6 @@ private:
void write_ticks();
std::string tick_trailer;
- std::string prog_name;
-
friend struct tick_write_dot;
friend struct tick_write_count;
friend struct ticker;
_______________________________________________
Monotone-devel mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/monotone-devel