diff options
author | Jon Bergli Heier <snakebite@jvnv.net> | 2010-04-13 18:43:31 +0200 |
---|---|---|
committer | Jon Bergli Heier <snakebite@jvnv.net> | 2010-04-13 18:43:31 +0200 |
commit | 93be01f2da848aadb9a2238d911187147a7f85f2 (patch) | |
tree | 7934680c65784d2f78046ba17e29b0b8b1abba5c | |
parent | ed74bfedbe815ca347eced64ee1127f52f8dae70 (diff) |
Support branches, first part.
-rwxr-xr-x | gitnoti.py | 35 |
1 files changed, 20 insertions, 15 deletions
@@ -37,8 +37,8 @@ if root[-1] == '/': repos = None -def repo_commit_msg(repo, commits): - reponame = os.path.splitext(os.path.basename(repo.path))[0] +def repo_commit_msg(repo, branch, commits): + reponame = os.path.splitext(os.path.basename(repo.working_dir))[0] deletions = insertions = 0 files = [] @@ -55,9 +55,10 @@ def repo_commit_msg(repo, commits): stat += ' \00303++%d\017' % insertions commit = commits[-1] - msg = '\002%s\002 pushed to \002%s\002 by \002%s\002 (%s) %s' % ( + msg = '\002%s/%s\002 pushed to \002%s\002 by \002%s\002 (%s) %s' % ( reponame, - commit.id_abbrev, + branch, + commit.sha[:7], commit.committer.name if commit.author.name == commit.committer.name else '%s/%s' % (commit.committer.name, commit.author.name), stat, commit.summary @@ -65,7 +66,7 @@ def repo_commit_msg(repo, commits): if options.url: msg += ' | ' - url = options.url % {'repo': reponame, 'commit': commit.id} + url = options.url % {'repo': reponame, 'commit': commit.sha} if have_bitly: short_url = None try: @@ -109,15 +110,19 @@ class ReposNotifyEvent(pyinotify.ProcessEvent): if not l[0]: l[0] = git.Repo(pathname) repo = l[0] - if not repo.heads: # No commits + if not repo.heads: # No branches return - last = l[1] - nlast = repo.heads[0].commit - if nlast.id != last: - commits = list(repo.commits_between(last, 'HEAD')) - msg = repo_commit_msg(repo, commits) - self.bot.gitmsg(msg) - l[1] = nlast.id + if not l[1]: + l[1] = dict([(h.name, h.commit.sha) for h in repo.heads]) + for h in repo.heads: + last = l[1][h.name] if h.name in l[1] else None + if h.commit.sha != last: + commits = list(repo.iter_commits('%s..%s' % (last, h.name))) + if not len(commits): # No commits + continue + msg = repo_commit_msg(repo, h.name, commits) + self.bot.gitmsg(msg) + l[1][h.name] = h.commit.sha def process_IN_CREATE(self, event): if os.path.dirname(event.pathname) == root: @@ -154,7 +159,7 @@ class Bot(irc.IRCClient): continue flags = pyinotify.EventsCodes.ALL_FLAGS wdd = self.wm.add_watch('%s/%s/refs/heads' % (root, path), flags['IN_MODIFY'] | flags['IN_CREATE']) - repos['%s/%s' % (root, path)] = [r, r.heads[0].commit.id if r.heads else None, wdd] + repos['%s/%s' % (root, path)] = [r, dict([(h.name, h.commit.sha) for h in r.heads]), wdd] def gitmsg(self, msg): self.say(options.channel, msg) @@ -220,7 +225,7 @@ class Bot(irc.IRCClient): if not repo: return - msg = repo_commit_msg(repo, [repo.heads[0].commit]) if repo.heads else ('No commits found for %s' % os.path.splitext(os.path.basename(repo.path))[0]) + msg = repo_commit_msg(repo, [repo.heads[0].commit]) if repo.heads else ('No commits found for %s' % os.path.splitext(os.path.basename(repo.working_dir))[0]) self.msg(target, msg) elif cmd == 'show': if not len(messagelist) == 4: |