diff --git a/pagure/hooks/files/fedmsg_hook.py b/pagure/hooks/files/fedmsg_hook.py index 1a6009d..d9512fa 100755 --- a/pagure/hooks/files/fedmsg_hook.py +++ b/pagure/hooks/files/fedmsg_hook.py @@ -22,23 +22,6 @@ import pagure.lib.git abspath = os.path.abspath(os.environ['GIT_DIR']) -def get_repo_name(): - ''' Return the name of the git repo based on its path. - ''' - repo_name = '.'.join(abspath.split(os.path.sep)[-1].split('.')[:-1]) - return repo_name - - -def get_username(): - ''' Return the username of the git repo based on its path. - ''' - username = None - repo = os.path.abspath(os.path.join(abspath, '..')) - if pagure.APP.config['FORK_FOLDER'] in repo: - username = repo.split(pagure.APP.config['FORK_FOLDER'])[1] - return username - - print "Emitting a message to the fedmsg bus." config = fedmsg.config.load_config([], None) config['active'] = True @@ -76,19 +59,21 @@ seen = [] # Read in all the rev information git-receive-pack hands us. for line in sys.stdin.readlines(): (oldrev, newrev, refname) = line.strip().split(' ', 2) - revs = pagure.lib.git.get_revs_between(oldrev, newrev) + revs = pagure.lib.git.get_revs_between(oldrev, newrev, abspath) def _build_commit(rev): files, total = build_stats(rev) summary = pagure.lib.git.read_git_lines( - ['log', '-1', rev, "--pretty='%s'"])[0].replace("'", '') + ['log', '-1', rev, "--pretty='%s'"], + abspath)[0].replace("'", '') message = pagure.lib.git.read_git_lines( - ['log', '-1', rev, "--pretty='%B'"])[0].replace("'", '') + ['log', '-1', rev, "--pretty='%B'"], + abspath)[0].replace("'", '') return dict( - name=pagure.lib.git.get_pusher(rev), - email=pagure.lib.git.get_pusher_email(rev), + name=pagure.lib.git.get_pusher(rev, abspath), + email=pagure.lib.git.get_pusher_email(rev, abspath), summary=summary, message=message, stats=dict( @@ -97,8 +82,8 @@ for line in sys.stdin.readlines(): ), rev=unicode(rev), path=abspath, - username=pagure.lib.git.get_username(), - repo=pagure.lib.git.get_repo_name(), + username=pagure.lib.git.get_username(abspath), + repo=pagure.lib.git.get_repo_name(abspath), branch=refname, agent=os.getlogin(), ) diff --git a/pagure/hooks/files/pagure_hook.py b/pagure/hooks/files/pagure_hook.py index a4d7b7d..a9aa28d 100644 --- a/pagure/hooks/files/pagure_hook.py +++ b/pagure/hooks/files/pagure_hook.py @@ -23,15 +23,15 @@ import pagure.exceptions import pagure.lib.link +abspath = os.path.abspath(os.environ['GIT_DIR']) + + def generate_revision_change_log(new_commits_list): print 'Detailed log of new commits:\n\n' commitid = None for line in pagure.lib.git.read_git_lines( - ['log', '--no-walk'] - + new_commits_list - + ['--'], - keepends=False,): + ['log', '--no-walk'] + new_commits_list + ['--'], abspath): if line.startswith('commit'): commitid = line.split('commit ')[-1] @@ -75,7 +75,7 @@ def relates_commit(commitid, issue, app_url=None): pagure.SESSION, issue=issue, comment=comment, - user=get_pusher(commitid), + user=pagure.lib.git.get_pusher(commitid, abspath), ticketfolder=pagure.APP.config['TICKETS_FOLDER'], ) pagure.SESSION.commit() @@ -107,7 +107,7 @@ def fixes_commit(commitid, issue, app_url=None): pagure.SESSION, issue=issue, comment=comment, - user=get_pusher(commitid), + user=pagure.lib.git.get_pusher(commitid, abspath), ticketfolder=pagure.APP.config['TICKETS_FOLDER'], ) pagure.SESSION.commit() @@ -118,9 +118,9 @@ def fixes_commit(commitid, issue, app_url=None): pagure.APP.logger.exception(err) branches = [ - item.replace('* ', '') for item in pagure.lib.git.read_git_lines( - ['branch', '--contains', commitid], - keepends=False) + item.replace('* ', '') + for item in pagure.lib.git.read_git_lines( + ['branch', '--contains', commitid], abspath) ] if 'master' in branches: @@ -129,7 +129,7 @@ def fixes_commit(commitid, issue, app_url=None): pagure.SESSION, issue, ticketfolder=pagure.APP.config['TICKETS_FOLDER'], - user=get_pusher(commitid), + user=pagure.lib.git.get_pusher(commitid, abspath), status='Fixed') pagure.SESSION.commit() except pagure.exceptions.PagureException as err: @@ -154,10 +154,10 @@ def run_as_post_receive_hook(): print refname generate_revision_change_log( - pagure.lib.git.get_revs_between(oldrev, newrev)) + pagure.lib.git.get_revs_between(oldrev, newrev, abspath)) - print 'repo:', pagure.lib.git.get_repo_name() - print 'user:', pagure.lib.git.get_username() + print 'repo:', pagure.lib.git.get_repo_name(abspath) + print 'user:', pagure.lib.git.get_username(abspath) def main(args): diff --git a/pagure/hooks/files/pagure_hook_requests.py b/pagure/hooks/files/pagure_hook_requests.py index 76f0f4c..8b05657 100644 --- a/pagure/hooks/files/pagure_hook_requests.py +++ b/pagure/hooks/files/pagure_hook_requests.py @@ -23,6 +23,9 @@ sys.path.insert(0, os.path.expanduser('~/repos/gitrepo/pagure')) import pagure.lib.git +abspath = os.path.abspath(os.environ['GIT_DIR']) + + def get_files_to_load(new_commits_list): print 'Files changed by new commits:\n' @@ -31,7 +34,7 @@ def get_files_to_load(new_commits_list): for commit in new_commits_list: filenames = pagure.lib.git.read_git_lines( ['diff-tree', '--no-commit-id', '--name-only', '-r', commit], - keepends=False) + abspath) for line in filenames: if line.strip(): file_list.append(line.strip()) @@ -54,18 +57,19 @@ def run_as_post_receive_hook(): print refname tmp = set(get_files_to_load( - pagure.lib.git.get_revs_between(oldrev, newrev))) + pagure.lib.git.get_revs_between(oldrev, newrev, abspath))) file_list = file_list.union(tmp) - reponame = pagure.lib.git.get_repo_name() - username = pagure.lib.git.get_username() + reponame = pagure.lib.git.get_repo_name(abspath) + username = pagure.lib.git.get_username(abspath) print 'repo:', reponame, username for filename in file_list: print 'To load: %s' % filename json_data = None data = ''.join( - pagure.lib.git.read_git_lines(['show', 'HEAD:%s' % filename])) + pagure.lib.git.read_git_lines( + ['show', 'HEAD:%s' % filename], abspath)) if data: try: json_data = json.loads(data) diff --git a/pagure/hooks/files/pagure_hook_tickets.py b/pagure/hooks/files/pagure_hook_tickets.py index 90061ff..dfa439a 100644 --- a/pagure/hooks/files/pagure_hook_tickets.py +++ b/pagure/hooks/files/pagure_hook_tickets.py @@ -23,6 +23,9 @@ sys.path.insert(0, os.path.expanduser('~/repos/gitrepo/pagure')) import pagure.lib.git +abspath = os.path.abspath(os.environ['GIT_DIR']) + + def get_files_to_load(new_commits_list): print 'Files changed by new commits:\n' @@ -31,7 +34,7 @@ def get_files_to_load(new_commits_list): for commit in new_commits_list: filenames = pagure.lib.git.read_git_lines( ['diff-tree', '--no-commit-id', '--name-only', '-r', commit], - keepends=False) + abspath) for line in filenames: if line.strip(): file_list.append(line.strip()) @@ -54,17 +57,19 @@ def run_as_post_receive_hook(): print refname tmp = set(get_files_to_load( - pagure.lib.git.get_revs_between(oldrev, newrev))) + pagure.lib.git.get_revs_between(oldrev, newrev, abspath))) file_list = file_list.union(tmp) - reponame = pagure.lib.git.get_repo_name() - username = pagure.lib.git.get_username() + reponame = pagure.lib.git.get_repo_name(abspath) + username = pagure.lib.git.get_username(abspath) print 'repo:', reponame, username for filename in file_list: print 'To load: %s' % filename json_data = None - data = ''.join(read_git_lines(['show', 'HEAD:%s' % filename])) + data = ''.join( + pagure.lib.git.read_git_lines( + ['show', 'HEAD:%s' % filename], abspath)) if data: try: json_data = json.loads(data) diff --git a/pagure/lib/git.py b/pagure/lib/git.py index 86caa71..8423efb 100644 --- a/pagure/lib/git.py +++ b/pagure/lib/git.py @@ -636,7 +636,7 @@ def add_file_to_git(repo, issue, ticketfolder, user, filename, filestream): return os.path.join('files', filename) -def read_output(cmd, input=None, keepends=False, **kw): +def read_output(cmd, abspath, input=None, keepends=False, **kw): if input: stdin = subprocess.PIPE else: @@ -659,38 +659,60 @@ def read_output(cmd, input=None, keepends=False, **kw): return out -def read_git_output(args, input=None, keepends=False, **kw): +def read_git_output(args, abspath, input=None, keepends=False, **kw): """Read the output of a Git command.""" - return read_output(['git'] + args, input=input, keepends=keepends, **kw) + return read_output( + ['git'] + args, abspath, input=input, keepends=keepends, **kw) -def read_git_lines(args, keepends=False, **kw): +def read_git_lines(args, abspath, keepends=False, **kw): """Return the lines output by Git command. Return as single lines, with newlines stripped off.""" - return read_git_output(args, keepends=True, **kw).splitlines(keepends) + return read_git_output( + args, abspath, keepends=keepends, **kw + ).splitlines(keepends) -def get_revs_between(torev, fromrev): +def get_revs_between(torev, fromrev, abspath): """ Yield revisions between HEAD and BASE. """ cmd = ['rev-list', '%s...%s' % (torev, fromrev)] if set(fromrev) == set('0'): cmd = ['rev-list', '%s' % torev] - return pagure.lib.git.read_git_lines(cmd) + return pagure.lib.git.read_git_lines(cmd, abspath) -def get_pusher(commit): +def get_pusher(commit, abspath): ''' Return the name of the person that pushed the commit. ''' user = pagure.lib.git.read_git_lines( - ['log', '-1', '--pretty=format:"%an"', commit])[0].replace('"', '') + ['log', '-1', '--pretty=format:"%an"', commit], + abspath)[0].replace('"', '') return user -def get_pusher_email(commit): +def get_pusher_email(commit, abspath): ''' Return the email of the person that pushed the commit. ''' user = pagure.lib.git.read_git_lines( - ['log', '-1', '--pretty=format:"%ae"', commit])[0].replace('"', '') + ['log', '-1', '--pretty=format:"%ae"', commit], + abspath)[0].replace('"', '') return user + + +def get_repo_name(abspath): + ''' Return the name of the git repo based on its path. + ''' + repo_name = '.'.join(abspath.split(os.path.sep)[-1].split('.')[:-1]) + return repo_name + + +def get_username(abspath): + ''' Return the username of the git repo based on its path. + ''' + username = None + repo = os.path.abspath(os.path.join(abspath, '..')) + if pagure.APP.config['FORK_FOLDER'] in repo: + username = repo.split(pagure.APP.config['FORK_FOLDER'])[1] + return username