mirror of
https://github.com/chocolate-doom/agito-config.git
synced 2024-11-21 20:00:56 +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