#
# patch "ChangeLog"
# from [181287bddd749618979457d9b21a322a97aef769]
# to [e490fd28c27b7d4735dfbfc5f5a1a253d0867257]
#
# patch "commands.cc"
# from [e351cc76be3dbe3eaa3d9a35f69a3efe5b09c414]
# to [82e7eeb431c5bd765fd43da20f96c28b2b9b4814]
#
# patch "database.cc"
# from [39d6b99c913576436deb56633c84e9ce3c96f73d]
# to [5d62241bcc64569576fd10f45db8bf559d8c1769]
#
# patch "database.hh"
# from [90a982ae9ae9e6ef58d778958e64735ba93b5029]
# to [6d54b527c19ca83ea17c04c733cc6f90b1e4722a]
#
# patch "diff_patch.cc"
# from [c080a1bd6428d24243c0fc224414be6eb0fb7949]
# to [ef0c0571db4382835b2fa73475bd23cbe6a6ea33]
#
# patch "manifest.cc"
# from [3d231ab4795853b737dc33a8dcb2dd4d50361fbc]
# to [aefd8d086360ea7349a541e2dfc0f4f7c28d9913]
#
# patch "netsync.cc"
# from [b68476ffc5852e56195629f4998af91221e48dcd]
# to [6c6cd98bcb3fe5a9c3c45af45cc47074f9e77fb8]
#
# patch "packet.cc"
# from [d5c6132eb05a5c5f64c504e465d825bf8a7e17d0]
# to [7f4cc56b5a4fd62495fcec98bcc2e67c6ddb96a8]
#
# patch "rcs_import.cc"
# from [4e0b292289773a83cad888d88a347d0423f1ad69]
# to [60f5ef2fcd089c3f6bde86d3dcca879dabe58d5b]
#
# patch "revision.cc"
# from [588fd8a7bcde43a46f0bde1dd1d13e9e77cf25a1]
# to [38aee4ec6634d7e11d7d5db73e1ad5d4349f7de9]
#
# patch "transforms.cc"
# from [92b2495dcc4067794d6b3cd58c0f30f865a08a28]
# to [1d167b91aac0a32e6336692122db4b3a575a1a24]
#
# patch "transforms.hh"
# from [bb010dc3df990b38ddb900d652d55cc13b4ff423]
# to [19f4be0e47d83830cc4a4d7279a2a24a54ce2e3d]
#
# patch "vocab.hh"
# from [17d5f1d1a5d0cbd5c7edb41ba42e8023273b0e99]
# to [8748cf40dd076dd813dbdab8d722b6da167218f0]
#
# patch "vocab_terms.hh"
# from [45c113192d19c5615f5d9822d76c686c8a301849]
# to [b515f4fd2882a1f6d26273c9af4c28664b43bce0]
#
--- ChangeLog
+++ ChangeLog
@@ -1,5 +1,10 @@
2005-04-17 Matt Johnston
+ * Move base64 code as close to the database as possible,
+ to avoid unnecessary inflating and deflating.
+
+2005-04-17 Matt Johnston
+
* commands.cc: warn that dropkey won't truly erase the privkey
from the database
* monotone.texi: same
--- commands.cc
+++ commands.cc
@@ -1499,8 +1499,7 @@
boost::shared_ptr cs(new change_set());
string log_message("");
- base64< gzip< data > > gz_dat;
- base64< gzip< delta > > gz_del;
+ delta del;
file_path pth(idx(args, 1)());
transaction_guard guard(app.db);
@@ -1518,24 +1517,23 @@
// fetch the new file input
string s = get_stdin();
- pack(data(s), gz_dat);
- new_fdata = file_data(gz_dat);
+ new_fdata = file_data(s);
calculate_ident(new_fdata, new_fid);
// diff and store the file edge
old_fid = manifest_entry_id(i);
app.db.get_file_version(old_fid, old_fdata);
- diff(old_fdata.inner(), new_fdata.inner(), gz_del);
+ diff(old_fdata.inner(), new_fdata.inner(), del);
dbw.consume_file_delta(old_fid, new_fid,
- file_delta(gz_del));
+ file_delta(del));
// diff and store the manifest edge
new_man = old_man;
new_man[pth] = new_fid;
calculate_ident(new_man, new_mid);
- diff(old_man, new_man, gz_del);
+ diff(old_man, new_man, del);
dbw.consume_manifest_delta(old_mid, new_mid,
- manifest_delta(gz_del));
+ manifest_delta(del));
// build and store a changeset and revision
cs->apply_delta(pth, old_fid, new_fid);
@@ -1570,12 +1568,9 @@
CMD(fload, "debug", "", "load file contents into db")
{
string s = get_stdin();
- base64< gzip< data > > gzd;
- pack(data(s), gzd);
-
file_id f_id;
- file_data f_data(gzd);
+ file_data f_data(s);
calculate_ident (f_data, f_id);
@@ -1590,7 +1585,6 @@
file_id anc_id(idx(args, 0)()), left_id(idx(args, 1)()), right_id(idx(args, 2)());
file_data anc, left, right;
- data anc_unpacked, left_unpacked, right_unpacked;
N(app.db.file_version_exists (anc_id),
F("ancestor file id does not exist"));
@@ -1605,15 +1599,11 @@
app.db.get_file_version(left_id, left);
app.db.get_file_version(right_id, right);
- unpack(left.inner(), left_unpacked);
- unpack(anc.inner(), anc_unpacked);
- unpack(right.inner(), right_unpacked);
-
vector anc_lines, left_lines, right_lines, merged_lines;
- split_into_lines(anc_unpacked(), anc_lines);
- split_into_lines(left_unpacked(), left_lines);
- split_into_lines(right_unpacked(), right_lines);
+ split_into_lines(anc.inner()(), anc_lines);
+ split_into_lines(left.inner()(), left_lines);
+ split_into_lines(right.inner()(), right_lines);
N(merge3(anc_lines, left_lines, right_lines, merged_lines), F("merge failed"));
copy(merged_lines.begin(), merged_lines.end(), ostream_iterator(cout, "\n"));
@@ -1696,9 +1686,7 @@
file_data dat;
L(F("dumping file %s\n") % ident);
app.db.get_file_version(ident, dat);
- data unpacked;
- unpack(dat.inner(), unpacked);
- cout.write(unpacked().data(), unpacked().size());
+ cout.write(dat.inner()().data(), dat.inner()().size());
}
else if (idx(args, 0)() == "manifest")
{
@@ -1725,9 +1713,7 @@
}
L(F("dumping manifest %s\n") % ident);
- data unpacked;
- unpack(dat.inner(), unpacked);
- cout.write(unpacked().data(), unpacked().size());
+ cout.write(dat.inner()().data(), dat.inner()().size());
}
else if (idx(args, 0)() == "revision")
@@ -1754,9 +1740,7 @@
}
L(F("dumping revision %s\n") % ident);
- data unpacked;
- unpack(dat.inner(), unpacked);
- cout.write(unpacked().data(), unpacked().size());
+ cout.write(dat.inner()().data(), dat.inner()().size());
}
else
throw usage(name);
@@ -2144,7 +2128,7 @@
app.db.get_manifest(m_old_id, m_old);
app.db.get_manifest(m_new_id, m_new);
- base64< gzip > del;
+ delta del;
diff(m_old, m_new, del);
pw.consume_manifest_delta(m_old_id, m_new_id,
manifest_delta(del));
@@ -2165,7 +2149,7 @@
app.db.get_file_version(f_old_id, f_old_data);
app.db.get_file_version(f_new_id, f_new_data);
- base64< gzip > del;
+ delta del;
diff(f_old_data.inner(), f_new_data.inner(), del);
pw.consume_file_delta(f_old_id, f_new_id, file_delta(del));
}
@@ -2642,7 +2626,7 @@
L(F("inserting manifest delta %s -> %s\n")
% edge_old_manifest(edge)
% rs.new_manifest);
- base64< gzip > del;
+ delta del;
diff(m_old, m_new, del);
dbw.consume_manifest_delta(edge_old_manifest(edge),
rs.new_manifest,
@@ -2672,7 +2656,7 @@
L(F("inserting delta %s -> %s\n")
% delta_entry_src(i) % delta_entry_dst(i));
file_data old_data;
- base64< gzip > new_data;
+ data new_data;
app.db.get_file_version(delta_entry_src(i), old_data);
read_localized_data(delta_entry_path(i), new_data, app.lua);
// sanity check
@@ -2681,7 +2665,7 @@
N(tid == delta_entry_dst(i).inner(),
F("file '%s' modified during commit, aborting")
% delta_entry_path(i));
- base64< gzip > del;
+ delta del;
diff(old_data.inner(), new_data, del);
dbw.consume_file_delta(delta_entry_src(i),
delta_entry_dst(i),
@@ -2690,7 +2674,7 @@
else
{
L(F("inserting full version %s\n") % delta_entry_dst(i));
- base64< gzip > new_data;
+ data new_data;
read_localized_data(delta_entry_path(i), new_data, app.lua);
// sanity check
hexenc tid;
@@ -2770,7 +2754,7 @@
{
file_data dat;
app.db.get_file_version(delta_entry_dst(i), dat);
- unpack(dat.inner(), unpacked);
+ unpacked = dat.inner();
}
else
{
@@ -2799,35 +2783,31 @@
else
{
file_data f_old;
- gzip decoded_old;
- data decompressed_old, decompressed_new;
+ data data_old, data_new;
vector old_lines, new_lines;
app.db.get_file_version(delta_entry_src(i), f_old);
- decode_base64(f_old.inner(), decoded_old);
- decode_gzip(decoded_old, decompressed_old);
+ data_old = f_old.inner();
if (new_is_archived)
{
file_data f_new;
- gzip decoded_new;
app.db.get_file_version(delta_entry_dst(i), f_new);
- decode_base64(f_new.inner(), decoded_new);
- decode_gzip(decoded_new, decompressed_new);
+ data_new = f_new.inner();
}
else
{
read_localized_data(delta_entry_path(i),
- decompressed_new, app.lua);
+ data_new, app.lua);
}
- if (guess_binary(decompressed_new()) ||
- guess_binary(decompressed_old()))
+ if (guess_binary(data_new()) ||
+ guess_binary(data_old()))
cout << "# " << delta_entry_path(i) << " is binary\n";
else
{
- split_into_lines(decompressed_old(), old_lines);
- split_into_lines(decompressed_new(), new_lines);
+ split_into_lines(data_old(), old_lines);
+ split_into_lines(data_new(), new_lines);
make_diff(delta_entry_path(i)(),
delta_entry_path(i)(),
old_lines, new_lines,
@@ -3352,7 +3332,7 @@
apply_change_set(anc_man, *anc_to_left, tmp);
apply_change_set(tmp, *left_to_merged, merged_man);
calculate_ident(merged_man, merged_rev.new_manifest);
- base64< gzip > left_mdelta, right_mdelta;
+ delta left_mdelta, right_mdelta;
diff(left_man, merged_man, left_mdelta);
diff(right_man, merged_man, right_mdelta);
if (left_mdelta().size() < right_mdelta().size())
--- database.cc
+++ database.cc
@@ -858,7 +858,7 @@
void
database::get(hexenc const & ident,
- base64< gzip > & dat,
+ data & dat,
string const & table)
{
results res;
@@ -868,17 +868,20 @@
// consistency check
base64 > rdata(res[0][0]);
+ data rdata_unpacked;
+ unpack(rdata, rdata_unpacked);
+
hexenc tid;
- calculate_ident(rdata, tid);
+ calculate_ident(rdata_unpacked, tid);
I(tid == ident);
- dat = rdata;
+ dat = rdata_unpacked;
}
void
database::get_delta(hexenc const & ident,
hexenc const & base,
- base64< gzip > & del,
+ delta & del,
string const & table)
{
I(ident() != "");
@@ -887,12 +890,14 @@
fetch(res, one_col, one_row,
"SELECT delta FROM '%q' WHERE id = '%q' AND base = '%q'",
table.c_str(), ident().c_str(), base().c_str());
- del = res[0][0];
+
+ base64 > del_packed = res[0][0];
+ unpack(del_packed, del);
}
void
database::put(hexenc const & ident,
- base64< gzip > const & dat,
+ data const & dat,
string const & table)
{
// consistency check
@@ -900,22 +905,29 @@
hexenc tid;
calculate_ident(dat, tid);
I(tid == ident);
+
+ base64 > dat_packed;
+ pack(dat, dat_packed);
execute("INSERT INTO '%q' VALUES('%q', '%q')",
- table.c_str(), ident().c_str(), dat().c_str());
+ table.c_str(), ident().c_str(), dat_packed().c_str());
}
void
database::put_delta(hexenc const & ident,
hexenc const & base,
- base64 > const & del,
+ delta const & del,
string const & table)
{
// nb: delta schema is (id, base, delta)
I(ident() != "");
I(base() != "");
+
+ base64 > del_packed;
+ pack(del, del_packed);
+
execute("INSERT INTO '%q' VALUES('%q', '%q', '%q')",
table.c_str(),
- ident().c_str(), base().c_str(), del().c_str());
+ ident().c_str(), base().c_str(), del_packed().c_str());
}
// static ticker cache_hits("vcache hits", "h", 1);
@@ -924,22 +936,21 @@
{
size_t capacity;
size_t use;
- std::map, base64< gzip > > cache;
+ std::map, data> cache;
version_cache() : capacity(constants::db_version_cache_sz), use(0)
{
srand(time(NULL));
}
- void put(hexenc const & ident,
- base64< gzip > const & dat)
+ void put(hexenc const & ident, data const & dat)
{
while (!cache.empty()
&& use + dat().size() > capacity)
{
std::string key = (F("%08.8x%08.8x%08.8x%08.8x%08.8x")
% rand() % rand() % rand() % rand() % rand()).str();
- std::map, base64< gzip > >::const_iterator i;
+ std::map, data>::const_iterator i;
i = cache.lower_bound(hexenc(key));
if (i == cache.end())
{
@@ -959,15 +970,14 @@
bool exists(hexenc const & ident)
{
- std::map, base64< gzip > >::const_iterator i;
+ std::map, data>::const_iterator i;
i = cache.find(ident);
return i != cache.end();
}
- bool get(hexenc const & ident,
- base64< gzip > & dat)
+ bool get(hexenc const & ident, data & dat)
{
- std::map, base64< gzip > >::const_iterator i;
+ std::map, data>::const_iterator i;
i = cache.find(ident);
if (i == cache.end())
return false;
@@ -982,7 +992,7 @@
void
database::get_version(hexenc const & ident,
- base64< gzip > & dat,
+ data & dat,
string const & data_table,
string const & delta_table)
{
@@ -1086,17 +1096,17 @@
I(found_root);
I(root() != "");
- base64< gzip > begin_packed;
data begin;
if (vcache.exists(root))
{
- I(vcache.get(root, begin_packed));
+ I(vcache.get(root, begin));
}
else
- get(root, begin_packed, data_table);
+ {
+ get(root, begin, data_table);
+ }
- unpack(begin_packed, begin);
hexenc curr = root;
boost::shared_ptr app = new_piecewise_applicator();
@@ -1112,18 +1122,14 @@
if (!vcache.exists(curr))
{
string tmp;
- base64< gzip > tmp_packed;
app->finish(tmp);
- pack(data(tmp), tmp_packed);
- vcache.put(curr, tmp_packed);
+ vcache.put(curr, tmp);
}
L(F("following delta %s -> %s\n") % curr % nxt);
- base64< gzip > del_packed;
- get_delta(nxt, curr, del_packed, delta_table);
delta del;
- unpack(del_packed, del);
+ get_delta(nxt, curr, del, delta_table);
apply_delta (app, del());
app->next();
@@ -1132,12 +1138,11 @@
string tmp;
app->finish(tmp);
- data end(tmp);
+ dat = data(tmp);
hexenc final;
- calculate_ident(end, final);
+ calculate_ident(dat, final);
I(final == ident);
- pack(end, dat);
}
vcache.put(ident, dat);
}
@@ -1155,13 +1160,13 @@
void
database::put_version(hexenc const & old_id,
hexenc const & new_id,
- base64< gzip > const & del,
+ delta const & del,
string const & data_table,
string const & delta_table)
{
- base64< gzip > old_data, new_data;
- base64< gzip > reverse_delta;
+ data old_data, new_data;
+ delta reverse_delta;
get_version(old_id, old_data, data_table, delta_table);
patch(old_data, del, new_data);
@@ -1182,11 +1187,11 @@
void
database::put_reverse_version(hexenc const & new_id,
hexenc const & old_id,
- base64< gzip > const & reverse_del,
+ delta const & reverse_del,
string const & data_table,
string const & delta_table)
{
- base64< gzip > old_data, new_data;
+ data old_data, new_data;
get_version(new_id, new_data, data_table, delta_table);
patch(new_data, reverse_del, old_data);
@@ -1260,7 +1265,7 @@
database::get_file_version(file_id const & id,
file_data & dat)
{
- base64< gzip > tmp;
+ data tmp;
get_version(id.inner(), tmp, "files", "file_deltas");
dat = tmp;
}
@@ -1269,7 +1274,7 @@
database::get_manifest_version(manifest_id const & id,
manifest_data & dat)
{
- base64< gzip > tmp;
+ data tmp;
get_version(id.inner(), tmp, "manifests", "manifest_deltas");
dat = tmp;
}
@@ -1404,14 +1409,19 @@
"SELECT data FROM revisions WHERE id = '%q'",
id.inner()().c_str());
- dat = revision_data(res[0][0]);
+ base64 > rdat_packed;
+ rdat_packed = base64 >(res[0][0]);
+ data rdat;
+ unpack(rdat_packed, rdat);
// verify that we got a revision with the right id
{
revision_id tmp;
- calculate_ident(dat, tmp);
+ calculate_ident(rdat, tmp);
I(id == tmp);
}
+
+ dat = rdat;
}
void
@@ -1430,11 +1440,14 @@
calculate_ident(d, tmp);
I(tmp == new_id);
+ base64 > d_packed;
+ pack(d.inner(), d_packed);
+
transaction_guard guard(*this);
execute("INSERT INTO revisions VALUES('%q', '%q')",
new_id.inner()().c_str(),
- d.inner()().c_str());
+ d_packed().c_str());
for (edge_map::const_iterator e = rev.edges.begin();
e != rev.edges.end(); ++e)
--- database.hh
+++ database.hh
@@ -102,34 +102,34 @@
void get_ids(std::string const & table, std::set< hexenc > & ids);
void get(hexenc const & new_id,
- base64< gzip > & dat,
+ data & dat,
std::string const & table);
void get_delta(hexenc const & ident,
hexenc const & base,
- base64< gzip > & del,
+ delta & del,
std::string const & table);
void get_version(hexenc const & id,
- base64< gzip > & dat,
+ data & dat,
std::string const & data_table,
std::string const & delta_table);
void put(hexenc const & new_id,
- base64< gzip > const & dat,
+ data const & dat,
std::string const & table);
void drop(hexenc const & base,
std::string const & table);
void put_delta(hexenc const & id,
hexenc const & base,
- base64< gzip > const & del,
+ delta const & del,
std::string const & table);
void put_version(hexenc const & old_id,
hexenc const & new_id,
- base64< gzip > const & del,
+ delta const & del,
std::string const & data_table,
std::string const & delta_table);
void put_reverse_version(hexenc const & new_id,
hexenc const & old_id,
- base64< gzip > const & reverse_del,
+ delta const & reverse_del,
std::string const & data_table,
std::string const & delta_table);
@@ -174,11 +174,11 @@
friend class transaction_guard;
friend void rcs_put_raw_file_edge(hexenc const & old_id,
hexenc const & new_id,
- base64< gzip > const & del,
+ delta const & del,
database & db);
friend void rcs_put_raw_manifest_edge(hexenc const & old_id,
hexenc const & new_id,
- base64< gzip > const & del,
+ delta const & del,
database & db);
public:
--- diff_patch.cc
+++ diff_patch.cc
@@ -484,7 +484,7 @@
L(F("recording successful merge of %s <-> %s into %s\n")
% left_ident % right_ident % merged_ident);
- base64< gzip > merge_delta;
+ delta merge_delta;
transaction_guard guard(app.db);
diff(left_data.inner(), merged_data.inner(), merge_delta);
@@ -548,9 +548,9 @@
anc_encoding = this->get_file_encoding(anc_path, anc_man);
right_encoding = this->get_file_encoding(right_path, right_man);
- unpack(left_data.inner(), left_unpacked);
- unpack(ancestor_data.inner(), ancestor_unpacked);
- unpack(right_data.inner(), right_unpacked);
+ left_unpacked = left_data.inner();
+ ancestor_unpacked = ancestor_data.inner();
+ right_unpacked = right_data.inner();
split_into_lines(left_unpacked(), left_encoding, left_lines);
split_into_lines(ancestor_unpacked(), anc_encoding, ancestor_lines);
@@ -562,18 +562,18 @@
merged_lines))
{
hexenc tmp_id;
- base64< gzip > packed_merge;
+ file_data merge_data;
string tmp;
L(F("internal 3-way merged ok\n"));
join_lines(merged_lines, tmp);
calculate_ident(data(tmp), tmp_id);
file_id merged_fid(tmp_id);
- pack(data(tmp), packed_merge);
+ merge_data = file_data(tmp);
merged_id = merged_fid;
record_merge(left_id, right_id, merged_fid,
- left_data, packed_merge);
+ left_data, merge_data);
return true;
}
@@ -589,16 +589,16 @@
right_unpacked, merged_unpacked))
{
hexenc tmp_id;
- base64< gzip > packed_merge;
+ file_data merge_data;
L(F("lua merge3 hook merged ok\n"));
calculate_ident(merged_unpacked, tmp_id);
file_id merged_fid(tmp_id);
- pack(merged_unpacked, packed_merge);
+ merge_data = file_data(merged_unpacked);
merged_id = merged_fid;
record_merge(left_id, right_id, merged_fid,
- left_data, packed_merge);
+ left_data, merge_data);
return true;
}
@@ -631,8 +631,8 @@
this->get_version(left_path, left_id, left_data);
this->get_version(right_path, right_id, right_data);
- unpack(left_data.inner(), left_unpacked);
- unpack(right_data.inner(), right_unpacked);
+ left_unpacked = left_data.inner();
+ right_unpacked = right_data.inner();
P(F("help required for 2-way merge\n"));
P(F("[ left] %s\n") % left_path);
@@ -643,16 +643,16 @@
left_unpacked, right_unpacked, merged_unpacked))
{
hexenc tmp_id;
- base64< gzip > packed_merge;
+ file_data merge_data;
L(F("lua merge2 hook merged ok\n"));
calculate_ident(merged_unpacked, tmp_id);
file_id merged_fid(tmp_id);
- pack(merged_unpacked, packed_merge);
+ merge_data = file_data(merged_unpacked);
merged_id = merged_fid;
record_merge(left_id, right_id, merged_fid,
- left_data, packed_merge);
+ left_data, merge_data);
return true;
}
@@ -690,7 +690,7 @@
app.db.get_file_version(ident, dat);
else
{
- base64< gzip > tmp;
+ data tmp;
file_id fid;
N(file_exists (path),
F("file %s does not exist in working copy") % path);
--- manifest.cc
+++ manifest.cc
@@ -140,11 +140,7 @@
read_manifest_map(manifest_data const & dat,
manifest_map & man)
{
- gzip decoded;
- data decompressed;
- decode_base64(dat.inner(), decoded);
- decode_gzip(decoded, decompressed);
- read_manifest_map(decompressed, man);
+ read_manifest_map(dat.inner(), man);
}
@@ -167,14 +163,7 @@
man.end(),
ostream_iterator(sstr));
- data raw;
- gzip compressed;
- base64< gzip > encoded;
-
- raw = sstr.str();
- encode_gzip(raw, compressed);
- encode_base64(compressed, encoded);
- dat = manifest_data(encoded);
+ dat = manifest_data(sstr.str());
}
void
--- netsync.cc
+++ netsync.cc
@@ -1847,8 +1847,7 @@
revision_data mdat;
data dat;
app.db.get_revision(revision_id(hitem), mdat);
- unpack(mdat.inner(), dat);
- out = dat();
+ out = mdat.inner()();
}
else
{
@@ -1862,8 +1861,7 @@
manifest_data mdat;
data dat;
app.db.get_manifest_version(manifest_id(hitem), mdat);
- unpack(mdat.inner(), dat);
- out = dat();
+ out = mdat.inner()();
}
else
{
@@ -1877,8 +1875,7 @@
file_data fdat;
data dat;
app.db.get_file_version(file_id(hitem), fdat);
- unpack(fdat.inner(), dat);
- out = dat();
+ out = fdat.inner()();
}
else
{
@@ -2343,8 +2340,8 @@
this->app.db.get_file_version(fbase, base_fdat);
this->app.db.get_file_version(fident, ident_fdat);
string tmp;
- unpack(base_fdat.inner(), base_dat);
- unpack(ident_fdat.inner(), ident_dat);
+ base_dat = base_fdat.inner();
+ ident_dat = ident_fdat.inner();
compute_delta(base_dat(), ident_dat(), tmp);
del = delta(tmp);
}
@@ -2367,8 +2364,8 @@
this->app.db.get_manifest_version(mbase, base_mdat);
this->app.db.get_manifest_version(mident, ident_mdat);
string tmp;
- unpack(base_mdat.inner(), base_dat);
- unpack(ident_mdat.inner(), ident_dat);
+ base_dat = base_mdat.inner();
+ ident_dat = ident_mdat.inner();
compute_delta(base_dat(), ident_dat(), tmp);
del = delta(tmp);
}
@@ -2493,9 +2490,7 @@
boost::shared_ptr< pair >
rp(new pair());
- base64< gzip > packed;
- pack(data(dat), packed);
- rp->first = revision_data(packed);
+ rp->first = revision_data(dat);
read_revision_set(dat, rp->second);
ancestry.insert(std::make_pair(rid, rp));
if (cert_refinement_done())
@@ -2513,9 +2508,7 @@
L(F("manifest version '%s' already exists in our database\n") % hitem);
else
{
- base64< gzip > packed_dat;
- pack(data(dat), packed_dat);
- this->dbw.consume_manifest_data(mid, manifest_data(packed_dat));
+ this->dbw.consume_manifest_data(mid, manifest_data(dat));
manifest_map man;
read_manifest_map(data(dat), man);
analyze_manifest(man);
@@ -2530,9 +2523,7 @@
L(F("file version '%s' already exists in our database\n") % hitem);
else
{
- base64< gzip > packed_dat;
- pack(data(dat), packed_dat);
- this->dbw.consume_file_data(fid, file_data(packed_dat));
+ this->dbw.consume_file_data(fid, file_data(dat));
}
}
break;
@@ -2566,20 +2557,18 @@
case manifest_item:
{
manifest_id src_manifest(hbase), dst_manifest(hident);
- base64< gzip > packed_del;
- pack(del, packed_del);
if (reverse_delta_requests.find(id_pair)
!= reverse_delta_requests.end())
{
reverse_delta_requests.erase(id_pair);
this->dbw.consume_manifest_reverse_delta(src_manifest,
dst_manifest,
- manifest_delta(packed_del));
+ manifest_delta(del));
}
else
this->dbw.consume_manifest_delta(src_manifest,
dst_manifest,
- manifest_delta(packed_del));
+ manifest_delta(del));
}
break;
@@ -2587,20 +2576,18 @@
case file_item:
{
file_id src_file(hbase), dst_file(hident);
- base64< gzip > packed_del;
- pack(del, packed_del);
if (reverse_delta_requests.find(id_pair)
!= reverse_delta_requests.end())
{
reverse_delta_requests.erase(id_pair);
this->dbw.consume_file_reverse_delta(src_file,
dst_file,
- file_delta(packed_del));
+ file_delta(del));
}
else
this->dbw.consume_file_delta(src_file,
dst_file,
- file_delta(packed_del));
+ file_delta(del));
}
break;
--- packet.cc
+++ packet.cc
@@ -601,7 +601,7 @@
{
file_id confirm;
file_data old_dat;
- base64< gzip > new_dat;
+ data new_dat;
pimpl->app.db.get_file_version(old_id, old_dat);
patch(old_dat.inner(), del.inner(), new_dat);
calculate_ident(file_data(new_dat), confirm);
@@ -645,7 +645,7 @@
{
file_id confirm;
file_data new_dat;
- base64< gzip > old_dat;
+ data old_dat;
pimpl->app.db.get_file_version(new_id, new_dat);
patch(new_dat.inner(), del.inner(), old_dat);
calculate_ident(file_data(old_dat), confirm);
@@ -706,7 +706,7 @@
{
manifest_id confirm;
manifest_data old_dat;
- base64< gzip > new_dat;
+ data new_dat;
pimpl->app.db.get_manifest_version(old_id, old_dat);
patch(old_dat.inner(), del.inner(), new_dat);
calculate_ident(manifest_data(new_dat), confirm);
@@ -750,7 +750,7 @@
{
manifest_id confirm;
manifest_data new_dat;
- base64< gzip > old_dat;
+ data old_dat;
pimpl->app.db.get_manifest_version(new_id, new_dat);
patch(new_dat.inner(), del.inner(), old_dat);
calculate_ident(manifest_data(old_dat), confirm);
@@ -1073,8 +1073,10 @@
packet_writer::consume_file_data(file_id const & ident,
file_data const & dat)
{
+ base64 > packed;
+ pack(dat.inner(), packed);
ost << "[fdata " << ident.inner()() << "]" << endl
- << trim_ws(dat.inner()()) << endl
+ << trim_ws(packed()) << endl
<< "[end]" << endl;
}
@@ -1083,9 +1085,11 @@
file_id const & new_id,
file_delta const & del)
{
+ base64 > packed;
+ pack(del.inner(), packed);
ost << "[fdelta " << old_id.inner()() << endl
<< " " << new_id.inner()() << "]" << endl
- << trim_ws(del.inner()()) << endl
+ << trim_ws(packed()) << endl
<< "[end]" << endl;
}
@@ -1094,9 +1098,11 @@
file_id const & old_id,
file_delta const & del)
{
+ base64 > packed;
+ pack(del.inner(), packed);
ost << "[frdelta " << new_id.inner()() << endl
<< " " << old_id.inner()() << "]" << endl
- << trim_ws(del.inner()()) << endl
+ << trim_ws(packed()) << endl
<< "[end]" << endl;
}
@@ -1104,8 +1110,10 @@
packet_writer::consume_manifest_data(manifest_id const & ident,
manifest_data const & dat)
{
+ base64 > packed;
+ pack(dat.inner(), packed);
ost << "[mdata " << ident.inner()() << "]" << endl
- << trim_ws(dat.inner()()) << endl
+ << trim_ws(packed()) << endl
<< "[end]" << endl;
}
@@ -1113,8 +1121,10 @@
packet_writer::consume_revision_data(revision_id const & ident,
revision_data const & dat)
{
+ base64 > packed;
+ pack(dat.inner(), packed);
ost << "[rdata " << ident.inner()() << "]" << endl
- << trim_ws(dat.inner()()) << endl
+ << trim_ws(packed()) << endl
<< "[end]" << endl;
}
@@ -1123,9 +1133,11 @@
manifest_id const & new_id,
manifest_delta const & del)
{
+ base64 > packed;
+ pack(del.inner(), packed);
ost << "[mdelta " << old_id.inner()() << endl
<< " " << new_id.inner()() << "]" << endl
- << trim_ws(del.inner()()) << endl
+ << trim_ws(packed()) << endl
<< "[end]" << endl;
}
@@ -1134,9 +1146,11 @@
manifest_id const & old_id,
manifest_delta const & del)
{
+ base64 > packed;
+ pack(del.inner(), packed);
ost << "[mrdelta " << new_id.inner()() << endl
<< " " << old_id.inner()() << "]" << endl
- << trim_ws(del.inner()()) << endl
+ << trim_ws(packed()) << endl
<< "[end]" << endl;
}
@@ -1193,7 +1207,9 @@
I(res[3].matched);
string head(res[1].first, res[1].second);
string ident(res[2].first, res[2].second);
- string body(trim_ws(string(res[3].first, res[3].second)));
+ base64 > body_packed(trim_ws(string(res[3].first, res[3].second)));
+ data body;
+ unpack(body_packed, body);
if (head == "rdata")
cons.consume_revision_data(revision_id(hexenc(ident)),
revision_data(body));
@@ -1215,7 +1231,9 @@
string head(res[4].first, res[4].second);
string src_id(res[5].first, res[5].second);
string dst_id(res[6].first, res[6].second);
- string body(trim_ws(string(res[7].first, res[7].second)));
+ base64 > body_packed(trim_ws(string(res[7].first, res[7].second)));
+ delta body;
+ unpack(body_packed, body);
if (head == "mdelta")
cons.consume_manifest_delta(manifest_id(hexenc(src_id)),
manifest_id(hexenc(dst_id)),
@@ -1248,7 +1266,7 @@
string certname(res[10].first, res[10].second);
string key(res[11].first, res[11].second);
string val(res[12].first, res[12].second);
- string body(res[13].first, res[13].second);
+ string body(trim_ws(string(res[13].first, res[13].second)));
// canonicalize the base64 encodings to permit searches
cert t = cert(hexenc(ident),
@@ -1359,20 +1377,16 @@
packet_writer pw(oss);
// an fdata packet
- base64< gzip > gzdata;
- pack(data("this is some file data"), gzdata);
- file_data fdata(gzdata);
+ file_data fdata("this is some file data");
file_id fid;
calculate_ident(fdata, fid);
pw.consume_file_data(fid, fdata);
// an fdelta packet
- base64< gzip > gzdata2;
- pack(data("this is some file data which is not the same as the first one"), gzdata2);
- file_data fdata2(gzdata2);
+ file_data fdata2("this is some file data which is not the same as the first one");
file_id fid2;
calculate_ident(fdata2, fid);
- base64< gzip > del;
+ delta del;
diff(fdata.inner(), fdata2.inner(), del);
pw.consume_file_delta(fid, fid2, file_delta(del));
@@ -1408,7 +1422,7 @@
file_id(hexenc("54f373ed07b4c5a88eaa93370e1bbac02dc432a8"))));
write_manifest_map(mm2, mdata2);
calculate_ident(mdata2, mid2);
- base64< gzip > del2;
+ delta del2;
diff(mdata.inner(), mdata2.inner(), del2);
pw.consume_manifest_delta(mid, mid2, manifest_delta(del));
--- rcs_import.cc
+++ rcs_import.cc
@@ -393,7 +393,7 @@
void
rcs_put_raw_file_edge(hexenc const & old_id,
hexenc const & new_id,
- base64< gzip > const & del,
+ delta const & del,
database & db)
{
if (old_id == new_id)
@@ -419,7 +419,7 @@
void
rcs_put_raw_manifest_edge(hexenc const & old_id,
hexenc const & new_id,
- base64< gzip > const & del,
+ delta const & del,
database & db)
{
if (old_id == new_id)
@@ -458,7 +458,7 @@
global_pieces.build_string(next_lines, tmp);
next_data = tmp;
}
- base64< gzip > del;
+ delta del;
diff(curr_data, next_data, del);
calculate_ident(next_data, next_id);
rcs_put_raw_file_edge(next_id, curr_id, del, db);
@@ -571,7 +571,6 @@
I(r.deltas.find(r.admin.head) != r.deltas.end());
hexenc id;
- base64< gzip > packed;
data dat(r.deltatexts.find(r.admin.head)->second->text);
calculate_ident(dat, id);
file_id fid = id;
@@ -580,9 +579,7 @@
if (! db.file_version_exists (fid))
{
- pack(dat, packed);
- file_data fdat = packed;
- db.put_file(fid, fdat);
+ db.put_file(fid, dat);
}
{
@@ -1083,7 +1080,7 @@
// tree version, which can be constructed from the 'newer' child. so
// the delta should run from child (new) -> parent (old).
- base64< gzip > del;
+ delta del;
diff(child, parent, del);
rcs_put_raw_manifest_edge(parent_mid.inner(),
child_mid.inner(),
@@ -1102,7 +1099,7 @@
// from temporally new -> temporally old. so the delta should go from
// parent (new) -> child (old)
- base64< gzip > del;
+ delta del;
diff(parent, child, del);
rcs_put_raw_manifest_edge(child_mid.inner(),
parent_mid.inner(),
--- revision.cc
+++ revision.cc
@@ -1699,9 +1699,7 @@
read_revision_set(revision_data const & dat,
revision_set & rev)
{
- data unpacked;
- unpack(dat.inner(), unpacked);
- read_revision_set(unpacked, rev);
+ read_revision_set(dat.inner(), rev);
rev.check_sane();
}
@@ -1723,9 +1721,7 @@
rev.check_sane();
data d;
write_revision_set(rev, d);
- base64< gzip > packed;
- pack(d, packed);
- dat = revision_data(packed);
+ dat = revision_data(d);
}
#ifdef BUILD_UNIT_TESTS
--- transforms.cc
+++ transforms.cc
@@ -123,69 +123,33 @@
void
diff(data const & olddata,
data const & newdata,
- base64< gzip > & del)
+ delta & del)
{
string unpacked;
compute_delta(olddata(), newdata(), unpacked);
- pack(delta(unpacked), del);
+ del = delta(unpacked);
}
void
patch(data const & olddata,
- base64< gzip > const & del,
+ delta const & del,
data & newdata)
{
- delta unpacked;
- unpack(del, unpacked);
string result;
- apply_delta(olddata(), unpacked(), result);
+ apply_delta(olddata(), del(), result);
newdata = result;
}
void
diff(manifest_map const & oldman,
manifest_map const & newman,
- base64< gzip > & del)
+ delta & del)
{
string xd;
compute_delta(oldman, newman, xd);
- pack(delta(xd), del);
+ del = delta(xd);
}
-void
-diff(base64< gzip > const & olddata,
- base64< gzip > const & newdata,
- base64< gzip > & del)
-{
- gzip olddata_decoded;
- gzip newdata_decoded;
-
- decode_base64(olddata, olddata_decoded);
- decode_base64(newdata, newdata_decoded);
-
- data olddata_decompressed;
- data newdata_decompressed;
-
- decode_gzip(olddata_decoded, olddata_decompressed);
- decode_gzip(newdata_decoded, newdata_decompressed);
-
- diff(olddata_decompressed,
- newdata_decompressed,
- del);
-}
-
-void
-patch(base64< gzip > const & olddata,
- base64< gzip > const & del,
- base64< gzip > & newdata)
-{
- data olddata_unpacked, newdata_unpacked;
- unpack(olddata, olddata_unpacked);
- patch(olddata_unpacked, del, newdata_unpacked);
- pack(newdata_unpacked, newdata);
-}
-
-
// identifier (a.k.a. sha1 signature) calculation
void
@@ -286,9 +250,7 @@
revision_id & ident)
{
hexenc tmp;
- data unpacked;
- unpack(dat.inner(), unpacked);
- calculate_ident(unpacked, tmp);
+ calculate_ident(dat.inner(), tmp);
ident = tmp;
}
--- transforms.hh
+++ transforms.hh
@@ -94,23 +94,16 @@
void diff(data const & olddata,
data const & newdata,
- base64< gzip > & del);
+ delta & del);
void diff(manifest_map const & oldman,
manifest_map const & newman,
- base64< gzip > & del);
+ delta & del);
-void diff(base64< gzip > const & old_data,
- base64< gzip > const & new_data,
- base64< gzip > & delta);
-
void patch(data const & olddata,
- base64< gzip > const & del,
+ delta const & del,
data & newdata);
-void patch(base64< gzip > const & old_data,
- base64< gzip > const & delta,
- base64< gzip > & new_data);
// version (a.k.a. sha1 fingerprint) calculation
--- vocab.hh
+++ vocab.hh
@@ -115,12 +115,12 @@
typedef epoch< hexenc > epoch_id;
typedef epoch< hexenc > epoch_data;
-typedef revision< base64< gzip > > revision_data;
-typedef manifest< base64< gzip > > manifest_data;
-typedef file< base64< gzip > > file_data;
+typedef revision< data > revision_data;
+typedef manifest< data > manifest_data;
+typedef file< data > file_data;
-typedef manifest< base64< gzip > > manifest_delta;
-typedef file< base64< gzip > > file_delta;
+typedef manifest< delta > manifest_delta;
+typedef file< delta > file_delta;
typedef std::pair var_key;
--- vocab_terms.hh
+++ vocab_terms.hh
@@ -63,15 +63,22 @@
EXTERN template class gzip;
EXTERN template class base64< gzip >;
-EXTERN template class revision< base64< gzip > >;
-EXTERN template class manifest< base64< gzip > >;
-EXTERN template class file< base64< gzip > >;
+//EXTERN template class revision< base64< gzip > >;
+//EXTERN template class manifest< base64< gzip > >;
+//EXTERN template class file< base64< gzip > >;
+EXTERN template class revision< data >;
+EXTERN template class manifest< data >;
+EXTERN template class file< data >;
+
EXTERN template class gzip;
EXTERN template class base64< gzip >;
-EXTERN template class manifest< base64< gzip > >;
-EXTERN template class file< base64< gzip > >;
+//EXTERN template class manifest< base64< gzip > >;
+//EXTERN template class file< base64< gzip > >;
+EXTERN template class manifest< delta >;
+EXTERN template class file< delta >;
+
EXTERN template class arc4;
EXTERN template class base64< arc4 >;
EXTERN template class base64< rsa_pub_key >;