def test_tag(self): """Test meta from tag object""" write_treeish_meta(self.repo, 'tag', '.', 'meta1.txt') # Read back and check with open('meta1.txt') as meta_fp: meta = json.load(meta_fp) eq_(meta['treeish'], 'tag') eq_(meta['tag'], self.tag_meta) eq_(meta['commit'], self.commit_meta)
def test_commit(self): """Test meta from commit object""" write_treeish_meta(self.repo, 'HEAD', '.', 'meta2.txt') # Read back and check with open('meta2.txt') as meta_fp: meta = json.load(meta_fp) eq_(meta['treeish'], 'HEAD') ok_('tag' not in meta) eq_(meta['commit'], self.commit_meta)
def test_tree(self): """Test meta from tree object""" tree = self.repo.write_tree() write_treeish_meta(self.repo, tree, '.', 'meta3.txt') # Read back and check with open('meta3.txt') as meta_fp: meta = json.load(meta_fp) eq_(meta['treeish'], tree) ok_('tag' not in meta) ok_('commit' not in meta)
def main(argv=None): """Main function""" args = parse_args(argv) logging.basicConfig(level=logging.INFO, format='%(name)s:%(levelname)s: %(message)s') LOGGER.info('Starting git-buildpackage source service') if args.verbose == 'yes': gbplog.setup(color='auto', verbose=True) logging.root.setLevel(logging.DEBUG) config = read_config(args.config) # Create / update cached repository refs_hack = str_to_bool(config['repo-cache-refs-hack']) try: repo = CachedRepo(config['repo-cache-dir'], args.url, refs_hack=refs_hack) args.revision = repo.update_working_copy(args.revision) except CachedRepoError as err: LOGGER.error('RepoCache: %s', str(err)) return 1 # Run GBP try: gbp_export(repo, args, config) # Write git meta file if args.git_meta: write_treeish_meta(repo.repo, args.revision, args.outdir, args.git_meta) except ExportError as err: LOGGER.error(err[0]) ret = err[1] except GbpServiceError as err: LOGGER.error(err) ret = EXIT_ERR_SERVICE else: ret = EXIT_OK return ret
def test_failures(self): """Failure cases""" write_treeish_meta(self.repo, 'HEAD', '.', 'meta4.txt') # Overwriting existing file should fail and not change file orig_stat = os.stat('meta4.txt') with assert_raises(GbpServiceError): write_treeish_meta(self.repo, 'tag', '.', 'meta4.txt') eq_(os.stat('meta4.txt'), orig_stat) # Non-existent dir -> failure with assert_raises(GbpServiceError): write_treeish_meta(self.repo, 'tag', 'non-existent-dir', 'meta.txt')
def main(argv=None): """Main function""" ret = EXIT_OK args = parse_args(argv) args.outdir = os.path.abspath(args.outdir) if args.verbose == 'yes': gbplog.setup(color='auto', verbose=True) LOGGER.setLevel(gbplog.DEBUG) gbp_repocache.LOGGER.setLevel(gbplog.DEBUG) gbs_log.setup(verbose=True) else: gbplog.setup(color='auto', verbose=False) gbs_log.setup(verbose=False) # Add a new handler writing to a tempfile into the root logger file_log = tempfile.NamedTemporaryFile(prefix='gbs-service_') file_handler = gbplog.GbpStreamHandler(file_log) gbplog.getLogger().addHandler(file_handler) LOGGER.info('Starting GBS source service') # Create outdir try: os.makedirs(args.outdir) except OSError as err: if err.errno != os.errno.EEXIST: LOGGER.error('Failed to create outdir: %s', err) return EXIT_ERR_SERVICE try: config = read_config(args.config) # Create / update cached repository refs_hack = str_to_bool(config['repo-cache-refs-hack']) try: repo = CachedRepo(config['repo-cache-dir'], args.url, refs_hack=refs_hack) args.revision = repo.update_working_copy(args.revision, submodules=False) except CachedRepoError as err: raise ServiceError('RepoCache: %s' % err, EXIT_ERR_SERVICE) # Export sources with GBS gbs_export(repo, args, config) # Write git-meta if args.git_meta: try: write_treeish_meta(repo.repo, args.revision, args.outdir, args.git_meta) except GbpServiceError as err: raise ServiceError(str(err), EXIT_ERR_SERVICE) except ServiceError as err: LOGGER.error(err[0]) if err[1] in args.error_pkg: file_handler.flush() error_fn = os.path.join(args.outdir, 'service-error') shutil.copy2(file_log.name, error_fn) with open(error_fn + '.spec', 'w') as error_spec: error_spec.write(ERROR_PKG_SPEC) ret = EXIT_OK else: ret = err[1] finally: gbplog.getLogger().removeHandler(file_handler) file_log.close() return ret