# # patch "ChangeLog" # from [e9de117a2044926f443013af7951cbe6069c62ae] # to [5c3d7675730904be66a8881e932045c9734dca6a] # # patch "commands.cc" # from [5c9d5557618af9fc3447467688a61189c4727014] # to [02840f7f28a0b9fafa6fe1816035ed6e5cf2fc8e] # # patch "manifest.cc" # from [13650d15c6b7fde18fb7018c68ebbf2e82d2d125] # to [63b95a89a40d5d8c24fda2e2103b31e53dc67026] # # patch "manifest.hh" # from [32ecf7dfe6decb959f38856418e5e572afa82cd2] # to [2665667c3cf960e64f39301fea45d1e4e67e5dba] # --- ChangeLog +++ ChangeLog @@ -1,5 +1,23 @@ 2005-04-23 Derek Scherger + * commands.cc (calculate_base_revision): rename to ... + (get_base_revision): ... this, since it's not calculating anything + (calculate_base_manifest): rename to ... + (get_base_manifest): ... this, and call get_base_revision + (calculate_restricted_revision): call get_base_revision and remove + missing files stuff + (add): + (drop): + (rename): + (attr): call get_base_manifest + (ls_missing): + (revert): call get_base_revision + * manifest.{cc,hh} (build_restricted_manifest_map): don't return + missing files and don't produce invalid manifests; do report on + all missing files before failing + +2005-04-23 Derek Scherger + * app_state.cc: * database.cc: * file_io.{cc, hh}: fix bad merge --- commands.cc +++ commands.cc @@ -496,10 +496,10 @@ } static void -calculate_base_revision(app_state & app, - revision_id & rid, - manifest_id & mid, - manifest_map & man) +get_base_revision(app_state & app, + revision_id & rid, + manifest_id & mid, + manifest_map & man) { man.clear(); @@ -524,12 +524,12 @@ } static void -calculate_base_manifest(app_state & app, - manifest_map & man) +get_base_manifest(app_state & app, + manifest_map & man) { revision_id rid; manifest_id mid; - calculate_base_revision(app, rid, mid, man); + get_base_revision(app, rid, mid, man); } static void @@ -538,7 +538,6 @@ revision_set & rev, manifest_map & m_old, manifest_map & m_new, - path_set & missing_files, change_set::path_rearrangement & restricted_work) { manifest_id old_manifest_id; @@ -551,9 +550,9 @@ m_old.clear(); m_new.clear(); - calculate_base_revision(app, - old_revision_id, - old_manifest_id, m_old); + get_base_revision(app, + old_revision_id, + old_manifest_id, m_old); get_path_rearrangement(work); extract_path_set(m_old, old_paths); @@ -571,7 +570,7 @@ cs->rearrangement = included; restricted_work = excluded; - build_restricted_manifest_map(new_paths, m_old, m_new, missing_files, app); + build_restricted_manifest_map(new_paths, m_old, m_new, app); complete_change_set(m_old, m_new, *cs); calculate_ident(m_new, rev.new_manifest); @@ -587,27 +586,6 @@ vector const & args, revision_set & rev, manifest_map & m_old, - manifest_map & m_new, - change_set::path_rearrangement & restricted_work) -{ - path_set missing_files; - calculate_restricted_revision(app, args, rev, m_old, m_new, missing_files, restricted_work); - - for (path_set::const_iterator i = missing_files.begin(); - i != missing_files.end(); ++i) - { - W(F("missing %s") % (*i)()); - } - - N(missing_files.size() == 0, - F("%d missing files\n") % missing_files.size()); -} - -static void -calculate_restricted_revision(app_state & app, - vector const & args, - revision_set & rev, - manifest_map & m_old, manifest_map & m_new) { change_set::path_rearrangement work; @@ -1470,7 +1448,7 @@ app.require_working_copy(); manifest_map m_old; - calculate_base_manifest(app, m_old); + get_base_manifest(app, m_old); change_set::path_rearrangement work; get_path_rearrangement(work); @@ -1494,7 +1472,7 @@ app.require_working_copy(); manifest_map m_old; - calculate_base_manifest(app, m_old); + get_base_manifest(app, m_old); change_set::path_rearrangement work; get_path_rearrangement(work); @@ -1519,7 +1497,7 @@ app.require_working_copy(); manifest_map m_old; - calculate_base_manifest(app, m_old); + get_base_manifest(app, m_old); change_set::path_rearrangement work; get_path_rearrangement(work); @@ -2083,7 +2061,7 @@ app.require_working_copy(); - calculate_base_revision(app, rid, mid, man); + get_base_revision(app, rid, mid, man); get_path_rearrangement(work); extract_path_set(man, old_paths); @@ -2588,7 +2566,7 @@ // check to make sure .mt-attr exists in // current manifest. manifest_map man; - calculate_base_manifest(app, man); + get_base_manifest(app, man); if (man.find(attr_path) == man.end()) { P(F("registering %s file in working copy\n") % attr_path); @@ -3683,9 +3661,9 @@ app.require_working_copy(); - calculate_base_revision(app, - old_revision_id, - old_manifest_id, m_old); + get_base_revision(app, + old_revision_id, + old_manifest_id, m_old); get_path_rearrangement(work); extract_path_set(m_old, old_paths); --- manifest.cc +++ manifest.cc @@ -63,7 +63,6 @@ build_restricted_manifest_map(path_set const & paths, manifest_map const & m_old, manifest_map & m_new, - path_set & missing_files, app_state & app) { m_new.clear(); @@ -76,12 +75,11 @@ read_inodeprint_map(dat, ipm); } + size_t missing_files = 0; + for (path_set::const_iterator i = paths.begin(); i != paths.end(); ++i) { - bool exists = file_exists(*i); - bool included = app.restriction_includes(*i); - - if (included && exists) + if (app.restriction_includes(*i)) { // compute the current sha1 id for included files // we might be able to avoid it, if we have an inode fingerprint... @@ -99,30 +97,31 @@ continue; } } + // ...ah, well, no good fingerprint, just check directly. - hexenc ident; - calculate_ident(*i, ident, app.lua); - m_new.insert(manifest_entry(*i, file_id(ident))); + if (file_exists(*i)) + { + hexenc ident; + calculate_ident(*i, ident, app.lua); + m_new.insert(manifest_entry(*i, file_id(ident))); + } + else + { + W(F("missing %s") % (*i)()); + missing_files++; + } } - else if (included && !exists) - { - missing_files.insert(*i); - - // copy the old manifest entry for missing files - manifest_map::const_iterator old = m_old.find(*i); - N(old != m_old.end(), - F("file missing but does not exist in old manifest: %s") % *i); - m_new.insert(*old); - } else { // copy the old manifest entry for excluded files manifest_map::const_iterator old = m_old.find(*i); - N(old != m_old.end(), - F("file restricted but does not exist in old manifest: %s") % *i); - m_new.insert(*old); + if (old != m_old.end()) m_new.insert(*old); } } + + N(missing_files == 0, + F("%d missing files\n") % missing_files); + } // reading manifest_maps --- manifest.hh +++ manifest.hh @@ -77,7 +77,6 @@ void build_restricted_manifest_map(path_set const & paths, manifest_map const & m_old, manifest_map & m_new, - path_set & missing_files, app_state & app); void read_manifest_map(data const & dat,