1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- <?xml version="1.0" encoding="UTF-8"?>
- <xsl:stylesheet
- version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- >
- <xsl:param name="DARCS" select="'/usr/local/bin/darcs'"/>
- <xsl:param name="GIT" select="'/usr/local/bin/git'"/>
- <xsl:param name="TMPDIR" select="'/tmp/darcs2git/'"/>
- <xsl:output method="text"/>
- <xsl:template match="/patches|/changelog">
- <xsl:text>DARCS="</xsl:text>
- <xsl:value-of select="$DARCS"/>
- <xsl:text>"
- </xsl:text>
- <xsl:text>GIT="</xsl:text>
- <xsl:value-of select="$GIT"/>
- <xsl:text>"
- </xsl:text>
- <xsl:text>TMPDIR="</xsl:text>
- <xsl:value-of select="$TMPDIR"/>
- <xsl:text>"
- ulimit -c 0
- </xsl:text>
- <xsl:apply-templates select="patch" />
- <xsl:text>
- rm -rf $TMPDIR
- </xsl:text>
- </xsl:template>
- <xsl:template match="patch">
- <xsl:text>$DARCS pull --all --quiet --matches="hash </xsl:text>
- <xsl:value-of select="@hash"/>
- <xsl:text>" --posthook=': > '"${TMPDIR}darcs_files.txt"' ; for fnl in "$DARCS_FILES" ; do echo -n "$fnl" >> '"${TMPDIR}darcs_files.txt"' ; done' || exit 1
- sed -E -e 's%^\./%%' ${TMPDIR}darcs_files.txt | \
- sed -E -e $'s%(\\$|`|"|\\\\)%\\\\\\1%g' \
- -e $'s%\'%\"\'\"%g' | \
- awk '{ printf " \"%s\"", $0 }' \
- > ${TMPDIR}darcs_files.args
- { echo -n "$GIT add --all" ; cat ${TMPDIR}darcs_files.args ; } > ${TMPDIR}git-add.sh
- sh -x ${TMPDIR}git-add.sh || exit 1
- echo -n "$GIT commit --allow-empty -m " > ${TMPDIR}git_commit.cmd
- cat >> ${TMPDIR}git_commit.cmd << '-EOF-'
- !:&#_</xsl:text>
- <xsl:value-of select="name"/>
- <xsl:text>!:&#_ -m !:&#_</xsl:text>
- <xsl:value-of select="comment"/>
- <xsl:text>!:&#_ --author=!:&#_</xsl:text>
- <xsl:choose>
- <xsl:when test="normalize-space(@author) = ''">
- <xsl:text>darcs2git <></xsl:text>
- </xsl:when>
- <xsl:when test="not(contains(@author,'<'))">
- <xsl:choose>
- <xsl:when test="contains(@author,'@') and not(contains(substring-after(@author,'@'),'@'))">
- <xsl:value-of select="normalize-space(substring-before(@author,'@'))"/>
- <xsl:text> <</xsl:text>
- <xsl:value-of select="normalize-space(@author)"/>
- <xsl:text>></xsl:text>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="@author"/>
- <xsl:text> <></xsl:text>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:when>
- <xsl:when test="not(normalize-space(substring-before(@author,'<')))">
- <xsl:text>darcs2git </xsl:text>
- <xsl:value-of select="@author"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="@author"/>
- </xsl:otherwise>
- </xsl:choose>
- <xsl:text>!:&#_ --date=!:&#_</xsl:text>
- <xsl:value-of select="@local_date"/>
- <xsl:text>!:&#_
- -EOF-
- sed -E -e $'s%(\\$|`|"|\\\\)%\\\\\\1%g' \
- -e 's%!:&#_%"%g' ${TMPDIR}git_commit.cmd \
- > ${TMPDIR}git-commit.sh
- truncate -s -1 ${TMPDIR}git-commit.sh
- cat ${TMPDIR}darcs_files.args >> ${TMPDIR}git-commit.sh
- sh -x ${TMPDIR}git-commit.sh || exit 1
- </xsl:text>
- </xsl:template>
- </xsl:stylesheet>
|