You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
git-filter-repo/t/t9391/create_fast_export_output.py

122 lines
4.1 KiB
Python

#!/usr/bin/env python
import git_filter_repo as fr
from git_filter_repo import Blob, Reset, FileChanges, Commit, Tag, FixedTimeZone
from git_filter_repo import Progress, Checkpoint
from datetime import datetime, timedelta
args = fr.FilteringOptions.default_options()
out = fr.RepoFilter(args)
out.importer_only()
output = out._output
world = Blob("Hello")
world.dump(output)
bar = Blob("foo\n")
bar.dump(output)
master = Reset("refs/heads/master")
master.dump(output)
changes = [FileChanges('M', 'world', world.id, mode="100644"),
FileChanges('M', 'bar', bar.id, mode="100644")]
when = datetime(year=2005, month=4, day=7,
hour=15, minute=16, second=10,
tzinfo=FixedTimeZone("-0700"))
when_string = fr.date_to_string(when)
commit1 = Commit("refs/heads/master",
"A U Thor", "au@thor.email", when_string,
"Com M. Iter", "comm@iter.email", when_string,
"My first commit! Wooot!\n\nLonger description",
changes,
from_commit = None,
merge_commits = [])
commit1.dump(output)
world = Blob("Hello\nHi")
world.dump(output)
world_link = Blob("world")
world_link.dump(output)
changes = [FileChanges('M', 'world', world.id, mode="100644"),
FileChanges('M', 'planet', world_link.id, mode="120000")]
when += timedelta(days=3, hours=4, minutes=6)
when_string = fr.date_to_string(when)
commit2 = Commit("refs/heads/master",
"A U Thor", "au@thor.email", when_string,
"Com M. Iter", "comm@iter.email", when_string,
"Make a symlink to world called planet, modify world",
changes,
from_commit = commit1.id,
merge_commits = [])
commit2.dump(output)
script = Blob("#!/bin/sh\n\necho Hello")
script.dump(output)
changes = [FileChanges('M', 'runme', script.id, mode="100755"),
FileChanges('D', 'bar')]
when_string = "1234567890 -0700"
commit3 = Commit("refs/heads/master",
"A U Thor", "au@thor.email", when_string,
"Com M. Iter", "comm@iter.email", when_string,
"Add runme script, remove bar",
changes,
from_commit = commit2.id,
merge_commits = [])
commit3.dump(output)
progress = Progress("Done with the master branch now...")
progress.dump(output)
checkpoint = Checkpoint()
checkpoint.dump(output)
devel = Reset("refs/heads/devel", commit1.id)
devel.dump(output)
world = Blob("Hello\nGoodbye")
world.dump(output)
changes = [FileChanges('M', 'world', world.id, mode="100644")]
when = datetime(2006, 8, 17, tzinfo=FixedTimeZone("+0200"))
when_string = fr.date_to_string(when)
commit4 = Commit("refs/heads/devel",
"A U Thor", "au@thor.email", when_string,
"Com M. Iter", "comm@iter.email", when_string,
"Modify world",
changes,
from_commit = commit1.id,
merge_commits = [])
commit4.dump(output)
world = Blob("Hello\nHi\nGoodbye")
world.dump(output)
when = fr.string_to_date(commit3.author_date) + timedelta(days=47)
when_string = fr.date_to_string(when)
# git fast-import requires file changes to be listed in terms of differences
# to the first parent. Thus, despite the fact that runme and planet have
# not changed and bar was not modified in the devel side, we have to list them
# all anyway.
changes = [FileChanges('M', 'world', world.id, mode="100644"),
FileChanges('D', 'bar'),
FileChanges('M', 'runme', script.id, mode="100755"),
FileChanges('M', 'planet', world_link.id, mode="120000")]
commit5 = Commit("refs/heads/devel",
"A U Thor", "au@thor.email", when_string,
"Com M. Iter", "comm@iter.email", when_string,
"Merge branch 'master'\n",
changes,
from_commit = commit4.id,
merge_commits = [commit3.id])
commit5.dump(output)
mytag = Tag("refs/tags/v1.0", commit5.id,
"His R. Highness", "royalty@my.kingdom", when_string,
"I bequeath to my peons this royal software")
mytag.dump(output)
out.finish()