diff --git a/earwigbot/commands/git.py b/earwigbot/commands/git.py index 66627d9..f6fd215 100644 --- a/earwigbot/commands/git.py +++ b/earwigbot/commands/git.py @@ -92,6 +92,16 @@ class Command(BaseCommand): msg = "unknown remote: \x0302{0}\x0301".format(remote_name) self.reply(self.data, msg) + def get_time_since(self, date): + diff = time.mktime(time.gmtime()) - date + if diff < 60: + return "{0} seconds".format(diff) + if diff < 60 * 60: + return "{0} minutes".format(int(diff / 60)) + if diff < 60 * 60 * 24: + return "{0} hours".format(int(diff / 60 / 60)) + return "{0} days".format(int(diff / 60 / 60 / 24)) + def do_help(self): """Display all commands.""" help = { @@ -106,7 +116,7 @@ class Command(BaseCommand): for key in sorted(help.keys()): subcommands += "\x0303{0}\x0301 ({1}), ".format(key, help[key]) subcommands = subcommands[:-2] # Trim last comma and space - msg = "sub-commands are: {0}; repos are: {1}. Syntax: !git \x0303subcommand\x0301 \x0302repo\x0301" + msg = "sub-commands are: {0}; repos are: {1}. Syntax: !git \x0303subcommand\x0301 \x0302repo\x0301." self.reply(self.data, msg.format(subcommands, self.get_repos())) def do_branch(self): @@ -191,25 +201,18 @@ class Command(BaseCommand): def do_status(self): """Check whether we have anything to pull.""" - last = self.repo.head.object.committed_date - diff = time.mktime(time.gmtime()) - last - if diff < 60: - since = "{0} seconds".format(diff) - elif diff < 60 * 60: - since = "{0} minutes".format(int(diff / 60)) - elif diff < 60 * 60 * 24: - since = "{0} hours".format(int(diff / 60 / 60)) - else: - since = "{0} days".format(int(diff / 60 / 60 / 24)) - remote = self.get_remote() if not remote: return + since = self.get_time_since(self.repo.head.object.committed_date) result = remote.fetch(dry_run=True) + updated = [info for info in result if info.flags != info.HEAD_UPTODATE] - if [info for info in result if info.flags != info.HEAD_UPTODATE]: - msg = "last local commit was {0}. Remote is \x02ahead\x0F of local copy." - self.reply(self.data, msg.format(since)) - else: - msg = "last commit was {0} ago. Local copy is \x02up-to-date\x0F with remote." + if updated: + latest = max([info.commit.committed_date for info in updated]) + remote_since = self.get_time_since(latest) + msg = "last local commit was \x02{0}\x0F ago; last remote commit was \x02{1}\x0F ago." + self.reply(self.data, msg.format(since, remote_since)) + else: + msg = "last commit was \x02{0}\x0F ago. Local copy is up-to-date with remote." self.reply(self.data, msg.format(since))