def main(self): """Perform the differencing.""" self.args.files = [ self.args.old_file, self.args.new_file ] # for defining self.observatory self.old_file = self.locate_file(self.args.old_file) self.new_file = self.locate_file(self.args.new_file) if self.args.brief: self.args.lowest_mapping_only = True self.args.remove_paths = True self.args.hide_boring_diffs = True self.args.include_header_diffs = True if self.args.sync_files: assert not (self.args.cache1 or self.args.cache2), \ "--sync-files is not compatible with cache-to-cache differences." if self.args.print_all_new_files: serial_old = naming.newstyle_serial(self.old_file) serial_new = naming.newstyle_serial(self.new_file) + 1 if None not in [serial_old, serial_new]: errs = sync.SyncScript("crds.sync --range {0}:{1}".format(serial_old, serial_new))() assert not errs, "Errors occurred while syncing all rules to CRDS cache." else: log.warning("Cannot sync non-standard mapping names, results may be incomplete.") else: self.sync_files([self.old_file, self.new_file]) elif self.args.print_all_new_files: log.warning("--print-all-new-files requires a complete set of rules. suggest --sync-files.") # self.args.files = [ self.old_file, self.new_file ] # for defining self.observatory assert (self.args.cache1 and self.args.cache2) or (not self.args.cache1 and not self.args.cache2), \ "Cache-to-cache comparison requires both --cache1 and --cache2; otherwise neither for single cache comparison." if self.args.print_new_files: status = self.print_new_files() elif self.args.print_all_new_files: status = self.print_all_new_files() elif self.args.print_affected_instruments: status = self.print_affected_instruments() elif self.args.print_affected_types: status = self.print_affected_types() elif self.args.print_affected_modes: status = self.print_affected_modes() else: status = difference(self.observatory, self.old_file, self.new_file, primitive_diffs=self.args.primitive_diffs, check_diffs=self.args.check_diffs, check_references=self.args.check_references, mapping_text_diffs=self.args.mapping_text_diffs, include_header_diffs=self.args.include_header_diffs, hide_boring_diffs=self.args.hide_boring_diffs, recurse_added_deleted=self.args.recurse_added_deleted, lowest_mapping_only=self.args.lowest_mapping_only, remove_paths=self.args.remove_paths, squash_tuples=self.args.squash_tuples, cache1=self.args.cache1, cache2=self.args.cache2) if log.errors() or log.warnings(): return 2 else: return status
def _setup_source_context(self): """Default the --source-context if necessary and then translate any symbolic name to a literal .pmap name. e.g. jwst-edit --> jwst_0109.pmap. Then optionally sync the files to a local cache. """ if self.args.source_context is None: self.source_context = self.observatory + "-edit" log.info("Defaulting --source-context to", srepr(self.source_context)) else: self.source_context = self.args.source_context self.source_context = self.resolve_context(self.source_context) if self.args.sync_files: errs = sync.SyncScript("crds.sync --contexts {}".format(self.source_context))() assert not errs, "Errors occurred while syncing all rules to CRDS cache."