From e0d3cabc5a25c611531e66b80a4d372f76e2b828 Mon Sep 17 00:00:00 2001 From: Patrick Ohly Date: Thu, 12 Mar 2015 17:09:41 +0100 Subject: combo-layer: partial import for '--history init' The new "since_revision" property can be used to cut off the imported history at some point. This is useful to keep the resulting repository smaller while still preserving enough history that "git annotate" reports the right author and commit for most lines. The initial, squashed import commit shows up with "unknown" as author in the "git annotate" output. It has the repository name as prefix in the subject line; importing that commit works best with a layer hook which does not add the repository name again when it is already present. Adding it here is useful for hooks which do not extend the subject line. (From OE-Core rev: 74f4c9e3bcdb3c4ca919623086e92a9379bd81ff) Signed-off-by: Patrick Ohly Signed-off-by: Ross Burton Signed-off-by: Richard Purdie --- scripts/combo-layer | 40 ++++++++++++++++++++++++++++++++++++++++ scripts/combo-layer.conf.example | 13 +++++++++++++ 2 files changed, 53 insertions(+) (limited to 'scripts') diff --git a/scripts/combo-layer b/scripts/combo-layer index 6d24ce3..cbff618 100755 --- a/scripts/combo-layer +++ b/scripts/combo-layer @@ -284,6 +284,46 @@ def action_init(conf, args): runcmd("git branch -D %s" % refname, ldir) # Make that the head revision. runcmd("git checkout -b %s %s" % (name, initialrev)) + # Optional: cut the history by replacing the given + # start point(s) with commits providing the same + # content (aka tree), but with commit information that + # makes it clear that this is an artifically created + # commit and nothing the original authors had anything + # to do with. + since_rev = repo.get('since_revision', '') + if since_rev: + committer = runcmd('git var GIT_AUTHOR_IDENT').strip() + # Same time stamp, no name. + author = re.sub('.* (\d+ [+-]\d+)', r'unknown \1', committer) + logger.info('author %s' % author) + for rev in since_rev.split(): + # Resolve in component repo... + rev = runcmd('git log --oneline --no-abbrev-commit -n1 %s' % rev, ldir).split()[0] + # ... and then get the tree in current + # one. The commit should be in both repos with + # the same tree, but better check here. + tree = runcmd('git show -s --pretty=format:%%T %s' % rev).strip() + with tempfile.NamedTemporaryFile() as editor: + editor.write('''cat >$1 <