- filter.update(d['Segments'].split())
-
-for ty in ('segments', 'checksums', 'snapshots'):
- for f in sorted(store1.list(ty)):
- m = cumulus.store.type_patterns[ty].match(f)
- if not m: continue
- if filter and m.group(1) not in filter:
- continue
-
- print ty, f
- try:
- store2.stat(ty, f)
- except cumulus.store.NotFoundError:
- store2.put(ty, f, store1.get(ty, f))
- print " [sent]"
+ items_required.update(d['Segments'].split())
+print "Required:", items_required
+
+files_present = set()
+for filetype in cumulus.SEARCH_PATHS:
+ for (name, path) in store2.list_generic(filetype):
+ items_required.discard(name)
+ files_present.add(path)
+print "Files already present:", sorted(files_present)
+
+files_required = []
+items_found = set()
+for filetype in cumulus.SEARCH_PATHS:
+ for (name, path) in store1.list_generic(filetype):
+ if name in items_required:
+ files_required.append(path)
+ items_found.add(name)
+files_required.sort()
+
+print "Missing:", items_required.difference(items_found)
+print "Required files:", files_required
+
+for f in files_required:
+ print f
+ store2.raw_backend.put(f, store1.raw_backend.get(f))