def commit_files(repo, message, git_files=[], annex_files=[]): """git-add and git-annex-add files and commit them @param repo: GitPython Repo object @param message: String @param git_files: List of filenames relative to repo root. @param annex_files: List of filenames relative to repo root. @return: GitPython Repo object """ added = annex_files + git_files added.sort() logging.debug(' files added: {}'.format(added)) if annex_files: repo.git.annex('add', annex_files) if git_files: repo.index.add(git_files) staged = dvcs.list_staged(repo) staged.sort() logging.debug(' files staged: {}'.format(staged)) # TODO cancel commit if list of staged doesn't match list of files added? commit = repo.index.commit(message) logging.debug(' commit: {}'.format(commit.hexsha)) committed = dvcs.list_committed(repo, commit) committed.sort() logging.debug(' files committed: {}'.format(committed)) # TODO complain if list of committed files doesn't match lists of added and staged files? return repo
def add_file_commit(entity, file_, repo, log, git_name, git_mail, agent): log.ok('add_file_commit(%s, %s, %s, %s, %s, %s)' % (file_, repo, log, git_name, git_mail, agent)) staged = dvcs.list_staged(repo) modified = dvcs.list_modified(repo) if staged and not modified: log.ok('All files staged.') log.ok('Updating changelog') path = file_.path_abs.replace('{}/'.format(entity.path), '') changelog_messages = ['Added entity file {}'.format(path)] if agent: changelog_messages.append('@agent: %s' % agent) changelog.write_changelog_entry( entity.changelog_path, changelog_messages, git_name, git_mail) log.ok('git add %s' % entity.changelog_path_rel) git_files = [entity.changelog_path_rel] dvcs.stage(repo, git_files) log.ok('Committing') commit = dvcs.commit(repo, 'Added entity file(s)', agent) log.ok('commit: {}'.format(commit.hexsha)) committed = dvcs.list_committed(repo, commit) committed.sort() log.ok('files committed:') for f in committed: log.ok('| %s' % f) else: log.not_ok('%s files staged, %s files modified' % (len(staged),len(modified))) log.not_ok('staged %s' % staged) log.not_ok('modified %s' % modified) log.not_ok('Can not commit!') raise Exception('Could not commit bc %s unstaged files: %s' % (len(modified), modified)) return file_,repo,log