mirror of
https://github.com/chocolate-doom/agito-config.git
synced 2024-11-23 20:42:44 +00:00
Add Git conversion configuration files.
Subversion-branch: /git Subversion-revision: 2539
This commit is contained in:
commit
abcd43a3e0
4 changed files with 312 additions and 0 deletions
17
.gitignore
vendored
Normal file
17
.gitignore
vendored
Normal file
|
@ -0,0 +1,17 @@
|
|||
|
||||
# These are the default patterns globally ignored by Subversion:
|
||||
*.o
|
||||
*.lo
|
||||
*.la
|
||||
*.al
|
||||
.libs
|
||||
*.so
|
||||
*.so.[0-9]*
|
||||
*.a
|
||||
*.pyc
|
||||
*.pyo
|
||||
*.rej
|
||||
*~
|
||||
.#*
|
||||
.*.swp
|
||||
.DS_store
|
6
README
Normal file
6
README
Normal file
|
@ -0,0 +1,6 @@
|
|||
|
||||
Configuration files for Subversion-Git conversion. These are for the
|
||||
Agito conversion tool:
|
||||
|
||||
http://github.com/fragglet/agito
|
||||
|
128
chocolate-doom-misc.cfg
Normal file
128
chocolate-doom-misc.cfg
Normal file
|
@ -0,0 +1,128 @@
|
|||
|
||||
# URL of the Subversion repository.
|
||||
|
||||
SVN_REPO = "file:///.../chocolate-doom-repo"
|
||||
|
||||
# Path to directory where the Git repository containing the converted
|
||||
# history should be stored.
|
||||
|
||||
GIT_REPO = "chocolate-doom-misc"
|
||||
|
||||
# Subversion paths to convert to Git branches.
|
||||
# If the paths contain the '%' character, this is a wildcard to map
|
||||
# from Subversion path to Git branch name. For example:
|
||||
# "/releases/foobar-%" : "v%"
|
||||
# Will result in this mapping:
|
||||
# /releases/foobar-0.0.1 -> v0.0.1
|
||||
|
||||
BRANCHES = {
|
||||
"/buildscripts" : "buildscripts",
|
||||
"/debian" : "debian",
|
||||
"/git" : "git",
|
||||
"/icon" : "icon",
|
||||
"/launcher" : "launcher",
|
||||
"/master" : "master",
|
||||
"/research" : "research",
|
||||
"/tools" : "tools",
|
||||
}
|
||||
|
||||
# Subversion paths to convert to Git tags.
|
||||
|
||||
TAGS = {
|
||||
}
|
||||
|
||||
# Subversion username to Git author mapping.
|
||||
|
||||
AUTHORS = {
|
||||
"fraggle" : ("Simon Howard", "fraggle@gmail.com"),
|
||||
|
||||
# Fall back to me.
|
||||
None : ("Simon Howard", "fraggle@gmail.com"),
|
||||
}
|
||||
|
||||
# Default author, when not found in the AUTHORS map above. The '%'
|
||||
# is replaced with the Subversion username.
|
||||
|
||||
DEFAULT_AUTHOR = ("%", "%@users.sourceforge.net")
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
# If true, tags are created as annotated tag objects, rather than just
|
||||
# refs to the head of the history of the tag. This is done by taking the
|
||||
# change at the head of the history, discarding it, and creating a tag
|
||||
# object in its place, reusing the commit message from the discarded
|
||||
# commit. This behavior works for most Subversion tags, where the tag
|
||||
# was created by a 'svn cp' from one path to another. As a sanity check,
|
||||
# the tree of the head commit is checked to ensure that it matches the
|
||||
# tree of the parent commit. If it does not, a normal "ref tag" is
|
||||
# created.
|
||||
|
||||
CREATE_TAG_OBJECTS = True
|
||||
|
||||
# Functions to apply to commit messages to convert from Subversion
|
||||
# commit messages to Git ones.
|
||||
|
||||
COMMIT_MESSAGE_FILTERS = [
|
||||
agito.reflow_text, # Reflow text to 72 columns
|
||||
agito.append_branch_info, # Append SVN branch/rev info.
|
||||
]
|
||||
|
||||
# List of revision numbers of Subversion revisions that should be
|
||||
# "filtered" from the converted history: any changes made in a filtered
|
||||
# revision will be included in the following revision instead. If you
|
||||
# filter a commit that is the head of a branch, you're going to have a
|
||||
# bad time.
|
||||
|
||||
FILTER_REVISIONS = []
|
||||
|
||||
# Callback function to invoke before creating each commit. This is
|
||||
# similar to Git's 'filter-branch' command. Invoked with the branch
|
||||
# path, log entry metadata dictionary, and Directory object representing
|
||||
# the tree.
|
||||
#
|
||||
# The metadata dictionary contains the data used in constructing the Git
|
||||
# commit - the keys are the same names as the environment variables set
|
||||
# by 'git filter-branch'.
|
||||
|
||||
#def my_filter_callback(path, entry, metadata, treedir):
|
||||
# pass
|
||||
#
|
||||
#FILTER_BRANCH_CALLBACK = my_filter_callback
|
||||
|
||||
# These lines are included in the root .gitignore file.
|
||||
|
||||
SVN_DEFAULT_IGNORES = """
|
||||
# These are the default patterns globally ignored by Subversion:
|
||||
*.o
|
||||
*.lo
|
||||
*.la
|
||||
*.al
|
||||
.libs
|
||||
*.so
|
||||
*.so.[0-9]*
|
||||
*.a
|
||||
*.pyc
|
||||
*.pyo
|
||||
*.rej
|
||||
*~
|
||||
.#*
|
||||
.*.swp
|
||||
.DS_store
|
||||
"""
|
||||
|
||||
# Subversion properties used for tracking merges. This maps from a
|
||||
# property name to a callback function to invoke when the property with
|
||||
# that value is changed on the root of a branch. The function returns a
|
||||
# tuple containing the Subversion path of the branch that was merged,
|
||||
# and the revision number of the point on the branch that was merged.
|
||||
|
||||
#def my_merge_callback(path, entry, changed):
|
||||
# old_value, new_value = changed
|
||||
# ...
|
||||
# return ("/branches/foo-branch", 1234)
|
||||
|
||||
MERGE_CALLBACKS = {
|
||||
|
||||
}
|
||||
|
||||
# vim: set ft=python:
|
161
chocolate-doom.cfg
Normal file
161
chocolate-doom.cfg
Normal file
|
@ -0,0 +1,161 @@
|
|||
import re
|
||||
|
||||
SVN_REPO_URL_RE = re.compile('http.*/svnroot/chocolate-doom(.*)')
|
||||
|
||||
# URL of the Subversion repository.
|
||||
|
||||
SVN_REPO = "file:///.../chocolate-doom-repo"
|
||||
GIT_REPO = "chocolate-doom"
|
||||
|
||||
BRANCHES = {
|
||||
"/trunk/chocolate-doom" : "master",
|
||||
"/branches/%" : "%",
|
||||
}
|
||||
|
||||
TAGS = {
|
||||
"/tags/%" : "%",
|
||||
}
|
||||
|
||||
# Subversion username to Git author mapping.
|
||||
|
||||
AUTHORS = {
|
||||
"fraggle" : ("Simon Howard", "fraggle@gmail.com"),
|
||||
"quasar_te" : ("James Haley", "haleyjd@hotmail.com"),
|
||||
"svkaiser" : ("Samuel Villareal", "svkaiser@gmail.com"),
|
||||
"rtc_marine" : ("Russell Rice", "rtc_marine@hotmail.com"),
|
||||
"zbuzanic" : ("Zvonimir Buzanic", "zvonimir.buzanic@gmail.com"),
|
||||
"jond" : ("Jon Dowland", "jon@dowland.me"),
|
||||
|
||||
# Fall back to me.
|
||||
None : ("Simon Howard", "fraggle@gmail.com"),
|
||||
}
|
||||
|
||||
# Default author, when not found in the AUTHORS map above. The '%'
|
||||
# is replaced with the Subversion username.
|
||||
|
||||
DEFAULT_AUTHOR = ("%", "%@users.sourceforge.net")
|
||||
|
||||
FILTER_REVISIONS = [ 5, 391, 392, 1027, 2528 ]
|
||||
|
||||
# Callback function to invoke before creating each commit. This is similar
|
||||
# to git's 'filter-branch' command. Invoked with the branch path, log entry
|
||||
# and Directory object representing the tree.
|
||||
|
||||
def fix_file(treedir, path, old_sha, new_sha):
|
||||
if path in treedir:
|
||||
perms, blob_id = treedir[path]
|
||||
if blob_id == old_sha:
|
||||
treedir[path] = (perms, new_sha)
|
||||
|
||||
# Original timestamps for tags that were deleted and recreated:
|
||||
TAG_TIMESTAMPS = {
|
||||
2525: "2006-01-20 19:46:14", # v0.1.3
|
||||
2526: "2006-02-13 20:10:03", # v0.1.4
|
||||
2527: "2008-04-20 02:01:14", # v1.1.1
|
||||
}
|
||||
|
||||
def filter_callback(path, entry, metadata, treedir):
|
||||
fix_file(treedir, "data/chocolate-doom.png",
|
||||
"f4b1dfde689943a08344fff687963a89d0115ee1",
|
||||
"6d58b87482d0fa39e86b15b715c172688c8f9164")
|
||||
fix_file(treedir, "data/chocolate-doom.ico",
|
||||
"36e98b716f1a7ba8602d2e3f2eaef1982fa774d9",
|
||||
"602d32d4bc2e134400913c27f3a921d1105b3286")
|
||||
|
||||
# Fix tag timestamps:
|
||||
revnum = entry.revision.number
|
||||
if revnum in TAG_TIMESTAMPS:
|
||||
metadata["GIT_AUTHOR_DATE"] = TAG_TIMESTAMPS[revnum]
|
||||
metadata["GIT_COMMITTER_DATE"] = TAG_TIMESTAMPS[revnum]
|
||||
|
||||
FILTER_BRANCH_CALLBACK = filter_callback
|
||||
|
||||
# These lines are included in the root .gitignore file.
|
||||
|
||||
SVN_DEFAULT_IGNORES = """
|
||||
# These are the default patterns globally ignored by Subversion:
|
||||
*.o
|
||||
*.lo
|
||||
*.la
|
||||
*.al
|
||||
.libs
|
||||
*.so
|
||||
*.so.[0-9]*
|
||||
*.a
|
||||
*.pyc
|
||||
*.pyo
|
||||
*.rej
|
||||
*~
|
||||
.#*
|
||||
.*.swp
|
||||
.DS_store
|
||||
"""
|
||||
|
||||
# If true, tags are created as annotated tag objects, rather than just
|
||||
# refs to the head of the history of the tag. This is done by taking
|
||||
# the change at the head of the history, removing it, and creating a
|
||||
# tag object in its place, reusing its commit message.
|
||||
# This behavior works for most Subversion tags, where the tag was
|
||||
# created by a 'svn cp' from one path to another.
|
||||
# As a sanity check, the tree of the head commit is checked to ensure
|
||||
# that it matches the tree of the parent commit. If it does not, a
|
||||
# normal "ref tag" is created.
|
||||
|
||||
CREATE_TAG_OBJECTS = True
|
||||
|
||||
def conditional_reflow(path, entry, message):
|
||||
# "Conditionally" reflow a Subversion commit message.
|
||||
# Chocolate Doom's commit messages are mostly in long line style,
|
||||
# but some are in multiple-line style with a maximum of 80
|
||||
# columns. Therefore, be flexible on reflowing: if all lines
|
||||
# in a message fit within 80 columns, consider that good enough
|
||||
# and don't reflow it. However, if anything exceeds 80 columns,
|
||||
# reflow the whole thing.
|
||||
# After ~r700, everything is long lines, so become strict.
|
||||
|
||||
if entry.revision.number < 700:
|
||||
for line in message.split("\n"):
|
||||
if len(line) > 80:
|
||||
break
|
||||
else:
|
||||
return message
|
||||
|
||||
return agito.reflow_text(path, entry, message)
|
||||
|
||||
def no_double_space(path, entry, message):
|
||||
return message.replace(". ", ". ")
|
||||
|
||||
# Functions to apply to commit messages to convert from Subversion
|
||||
# commit messages to git ones.
|
||||
|
||||
COMMIT_MESSAGE_FILTERS = [
|
||||
#agito.reflow_text,
|
||||
no_double_space,
|
||||
conditional_reflow,
|
||||
agito.append_branch_info,
|
||||
]
|
||||
|
||||
def branch_helper_callback(path, entry, changed):
|
||||
before = int((changed[0] or "0").strip())
|
||||
after = int((changed[1] or "0").strip())
|
||||
|
||||
if after < before:
|
||||
return None
|
||||
|
||||
# At this point we have detected a legitimate merge.
|
||||
# Use the 'old' value of parent_url as there are merges where
|
||||
# the property was changed by mistake.
|
||||
|
||||
print "branch_helper:merged: %i -> %i" % (before, after)
|
||||
parent_url = agito.propget(path, entry.revision.number - 1,
|
||||
'branch_helper:parent_url')
|
||||
|
||||
match = SVN_REPO_URL_RE.match(parent_url)
|
||||
assert match
|
||||
return (match.group(1), after)
|
||||
|
||||
MERGE_CALLBACKS = {
|
||||
"branch_helper:last_merged": branch_helper_callback
|
||||
}
|
||||
|
||||
# vim: set ft=python:
|
Loading…
Reference in a new issue