From 9a7bdf40f265c9f106f1ca85d96f4bf1d311321c Mon Sep 17 00:00:00 2001 From: Campbell Barton <ideasman42@gmail.com> Date: Wed, 15 Oct 2014 13:07:56 +0200 Subject: [PATCH] utility script to sort commits --- git/git_sort_commits.py | 62 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100755 git/git_sort_commits.py diff --git a/git/git_sort_commits.py b/git/git_sort_commits.py new file mode 100755 index 0000000..9a77f04 --- /dev/null +++ b/git/git_sort_commits.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python3 + +# ##### BEGIN GPL LICENSE BLOCK ##### +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# ##### END GPL LICENSE BLOCK ##### + +# <pep8 compliant> + +""" +Sort commits by date (oldest first) +(useful for collecting commits to cherry pick) + +Example: + + git_sort_commits.py < commits.txt +""" + +import sys +import os + +MODULE_DIR = os.path.normpath(os.path.join(os.path.dirname(__file__), "..", "utils")) +SOURCE_DIR = os.path.normpath(os.path.join(MODULE_DIR, "..", "..", "..", ".git")) + +sys.path.append(MODULE_DIR) + +import git_log + + +def main(): + + import re + re_sha1_prefix = re.compile("^r[A-Z]+") + + def strip_sha1(sha1): + # strip rB, rBA ... etc + sha1 = re.sub(re_sha1_prefix, "", sha1) + return sha1 + + commits = [git_log.GitCommit(strip_sha1(l), SOURCE_DIR) + for l in sys.stdin.read().split()] + + commits.sort(key=lambda c: c.date) + + for c in commits: + print(c.sha1) + +if __name__ == "__main__": + main() -- GitLab