#
# patch "ChangeLog"
# from [18eeae4bff5693c692772b1a08861b152609d5a1]
# to [0ca93767cb63da9e8be5fdc8455639412d25be84]
#
# patch "commands.cc"
# from [2b9bb2299e2fe0f337e33d1989d6f3f6d8c793c7]
# to [d127c7cd5850b011fce7ebb5247d172a9ce461c2]
#
--- ChangeLog
+++ ChangeLog
@@ -1,3 +1,8 @@
+2005-07-04 Nathaniel Smith
+
+ * commands.cc (process_netsync_args, push, pull, sync, serve):
+ Adapt for patterns instead of regexen; slight refactoring too.
+
2005-07-03 Nathaniel Smith
* netsync.cc: Finally self-consistent.
--- commands.cc
+++ commands.cc
@@ -49,6 +49,7 @@
#include "selectors.hh"
#include "annotate.hh"
#include "options.hh"
+#include "globish.hh"
//
// this file defines the task-oriented "top level" commands which can be
@@ -1976,14 +1977,17 @@
static const var_key default_server_key(var_domain("database"),
var_name("default-server"));
-static const var_key default_pattern_key(var_domain("database"),
- var_name("default-pattern"));
+static const var_key default_include_pattern_key(var_domain("database"),
+ var_name("default-include-pattern"));
+static const var_key default_exclude_pattern_key(var_domain("database"),
+ var_name("default-exclude-pattern"));
static void
-process_netsync_client_args(std::string const & name,
- std::vector const & args,
- utf8 & addr, std::vector & patterns,
- app_state & app)
+process_netsync_args(std::string const & name,
+ std::vector const & args,
+ utf8 & addr,
+ utf8 & include_pattern, utf8 & exclude_pattern,
+ app_state & app)
{
if (args.size() > 2)
throw usage(name);
@@ -2006,74 +2010,72 @@
addr = utf8(addr_value());
L(F("using default server address: %s\n") % addr);
}
- // NB: even though the netsync code wants a vector of patterns, in fact
- // this only works for the server; when we're a client, our vector must have
- // length exactly 1.
- utf8 pattern;
if (args.size() >= 2)
{
- pattern = idx(args, 1);
- if (!app.db.var_exists(default_pattern_key))
+ std::set patterns(args.begin() + 1, args.end());
+ combine_and_check_globish(patterns, include_pattern);
+ if (!app.db.var_exists(default_include_pattern_key))
{
- P(F("setting default regex pattern to %s\n") % pattern);
- app.db.set_var(default_pattern_key, var_value(pattern()));
+ P(F("setting default branch pattern to %s\n") % include_pattern);
+ app.db.set_var(default_include_pattern_key, var_value(include_pattern()));
}
}
else
{
- N(app.db.var_exists(default_pattern_key),
- F("no regex pattern given and no default pattern set"));
+ N(app.db.var_exists(default_include_pattern_key),
+ F("no branch pattern given and no default pattern set"));
var_value pattern_value;
- app.db.get_var(default_pattern_key, pattern_value);
- pattern = utf8(pattern_value());
- L(F("using default regex pattern: %s\n") % pattern);
+ app.db.get_var(default_include_pattern_key, pattern_value);
+ include_pattern = utf8(pattern_value());
+ L(F("using default branch pattern: %s\n") % include_pattern);
}
- patterns.push_back(pattern);
+
+ // For now, don't handle excludes.
+ exclude_pattern = utf8("");
}
-CMD(push, "network", "[ADDRESS[:PORTNUMBER] [REGEX]]",
+CMD(push, "network", "[ADDRESS[:PORTNUMBER] [PATTERN]]",
"push branches matching REGEX to netsync server at ADDRESS", OPT_NONE)
{
- utf8 addr;
- vector patterns;
- process_netsync_client_args(name, args, addr, patterns, app);
+ utf8 addr, include_pattern, exclude_pattern;
+ process_netsync_args(name, args, addr, include_pattern, exclude_pattern, app);
rsa_keypair_id key;
N(guess_default_key(key, app), F("could not guess default signing key"));
app.signing_key = key;
- run_netsync_protocol(client_voice, source_role, addr, patterns, app);
+ run_netsync_protocol(client_voice, source_role, addr,
+ include_pattern, exclude_pattern, app);
}
-CMD(pull, "network", "[ADDRESS[:PORTNUMBER] [REGEX]]",
+CMD(pull, "network", "[ADDRESS[:PORTNUMBER] [PATTERN]]",
"pull branches matching REGEX from netsync server at ADDRESS", OPT_NONE)
{
- utf8 addr;
- vector patterns;
- process_netsync_client_args(name, args, addr, patterns, app);
+ utf8 addr, include_pattern, exclude_pattern;
+ process_netsync_args(name, args, addr, include_pattern, exclude_pattern, app);
if (app.signing_key() == "")
W(F("doing anonymous pull\n"));
- run_netsync_protocol(client_voice, sink_role, addr, patterns, app);
+ run_netsync_protocol(client_voice, sink_role, addr,
+ include_pattern, exclude_pattern, app);
}
-CMD(sync, "network", "[ADDRESS[:PORTNUMBER] [REGEX]]",
+CMD(sync, "network", "[ADDRESS[:PORTNUMBER] [PATTERN]]",
"sync branches matching REGEX with netsync server at ADDRESS", OPT_NONE)
{
- utf8 addr;
- vector patterns;
- process_netsync_client_args(name, args, addr, patterns, app);
+ utf8 addr, include_pattern, exclude_pattern;
+ process_netsync_args(name, args, addr, include_pattern, exclude_pattern, app);
rsa_keypair_id key;
N(guess_default_key(key, app), F("could not guess default signing key"));
app.signing_key = key;
- run_netsync_protocol(client_voice, source_and_sink_role, addr, patterns,
- app);
+ run_netsync_protocol(client_voice, source_and_sink_role, addr,
+ include_pattern, exclude_pattern, app);
}
-CMD(serve, "network", "ADDRESS[:PORTNUMBER] REGEX ...",
+CMD(serve, "network", "ADDRESS[:PORTNUMBER] PATTERN ...",
"listen on ADDRESS and serve the specified branches to connecting clients", OPT_PIDFILE)
{
if (args.size() < 2)
@@ -2089,9 +2091,10 @@
F("need permission to store persistent passphrase (see hook persist_phrase_ok())"));
require_password(key, app);
- utf8 addr(idx(args,0));
- vector patterns(args.begin() + 1, args.end());
- run_netsync_protocol(server_voice, source_and_sink_role, addr, patterns, app);
+ utf8 addr, include_pattern, exclude_pattern;
+ process_netsync_args(name, args, addr, include_pattern, exclude_pattern, app);
+ run_netsync_protocol(server_voice, source_and_sink_role, addr,
+ include_pattern, exclude_pattern, app);
}