2013-09-02 17:13:32 +00:00
#! /usr/bin/env bash
if [ -z " $1 " ]
then
echo "Please provide a repo to clone"
exit 1
fi
clean_tex( )
{
for f in data Makefile images/acu.pdf images/assistants.pdf images/assistants-subject.pdf images/assistants-slides.pdf images/assistants.png images/epita.pdf images/epita.png images/epita-invert.pdf images/assistants-invert.pdf images/epita-invert.png *.cls *.sty *.tex
do
if [ -f " $f " ]
then
git rm -f " $f " > /dev/null
elif [ -d " $f " ]
then
git rm -fr " $f " > /dev/null
fi
done
cd include
for i in ` find -type f -name '*.tex' `
do
bi = ` basename " $i " `
echo -e " \e[1;34m>>>\e[1;37m Trying to convert $i to Markdown...\e[0m "
2013-09-28 09:13:07 +00:00
sed -Ei 's/\\includegraphics *\{([^}]+)}/\\verb+%%image(\1)+/gi' " $i "
2013-09-28 02:53:24 +00:00
sed -Ei 's/\\include *\{([^}]+)}/\\verb+%%scoped-include(\1)+/gi' " $i "
sed -Ei 's/\\input *\{([^}]+)}/\\verb+%%scoped-include(\1)+/gi' " $i "
sed -Ei 's/\{\\include *([^}]+)}/\\verb+%%scoped-include(\1)+/gi' " $i "
sed -Ei 's/\{\\input *([^}]+)}/\\verb+%%scoped-include(\1)+/gi' " $i "
2013-09-02 17:13:32 +00:00
sed -Ei 's/\\lstinline *\{([^}]+)}/\\verb+\1+/gi' " $i "
sed -Ei 's/\\begin *\{correction\}/\\begin\{verbatim\}/g' " $i "
sed -Ei 's/\\end *\{correction\}/\\end\{verbatim\}/g' " $i "
sed -Ei 's/\\begin *\{prompt\}/\\begin\{verbatim\}/g' " $i "
sed -Ei 's/\\end *\{prompt\}/\\end\{verbatim\}/g' " $i "
sed -Ei 's/\\begin *\{script\}/\\begin\{verbatim\}/g' " $i "
sed -Ei 's/\\end *\{script\}/\\end\{verbatim\}/g' " $i "
sed -Ei 's/\\begin *\{cartouche\}/\\begin\{verbatim\}/g' " $i "
sed -Ei 's/\\end *\{cartouche\}/\\end\{verbatim\}/g' " $i "
sed -Ei 's/\\begin *\{cartouche_nospaces\}/\\begin\{verbatim\}/g' " $i "
sed -Ei 's/\\end *\{cartouche_nospaces\}/\\end\{verbatim\}/g' " $i "
2013-09-28 09:13:07 +00:00
sed -Ei 's/\\verb ([^+]+) /\\verb+\1+/g' " $i "
2013-09-02 17:13:32 +00:00
2013-09-28 02:53:24 +00:00
# Special macros
2013-09-30 08:52:58 +00:00
sed -Ei 's/\\(file|email|command) *\{([^{]*\{[^}]*\})*([^}]*)}/\\verb+\2\3+/gi' " $i "
2013-09-28 02:53:24 +00:00
sed -Ei 's/\\begin *\{assistant\}/\\verb+%%assistant-begin+/g' " $i "
sed -Ei 's/\\end *\{assistant\}/\\verb+%%assistant-end+/g' " $i "
2013-09-02 17:13:32 +00:00
# Convert Beamer
sed -Ei 's/\\begin\[[^]]+\]\{frame\}\{([^}]+)\}/\\subsection\{\1\}/g' " $i "
sed -Ei 's/\\begin\{frame\}\{([^}]+)\}\[[^]]+\]/\\subsection\{\1\}/g' " $i "
sed -Ei 's/\\begin\{frame\}\{([^}]+)\}/\\subsection\{\1\}/g' " $i "
sed -Ei 's/\\begin(\[[^]]+\])?\{frame\}(\[[^]]+\])?//g' " $i "
sed -Ei 's/\\begin\{block\}\{([^}]+)\}/\\subsubsection\{\1\}/g' " $i "
sed -Ei 's/\\begin\{block\}/\\subsubsection\{~\}/g' " $i "
sed -Ei 's/\\end(\[[^]]+\])?\{frame\}(\[[^]]+\])?//g' " $i "
sed -Ei 's/\\end(\[[^]]+\])?\{block\}(\[[^]]+\])?//g' " $i "
sed -Ei 's/\\frametitle *\{/\\subsection\{/g' " $i "
sed -Ei 's/\\framesubtitle *\{/\\subsubsection\{/g' " $i "
sed -Ei 's/\\(sub)*section *\{\}//g' " $i "
sed -Ei 's/\\frame *\{/\{/g' " $i "
sed -Ei 's/\\frame//g' " $i "
sed -Ei 's/\\item( *)<[^>]+>/\\item\1/g' " $i "
if pandoc -o ../${ bi %%.tex } .md $i
then
git add ../${ bi %%.tex } .md
git checkout " $i "
git rm -f " $i " > /dev/null
fi
2013-09-28 02:53:24 +00:00
sed -Ei 's/`%%([a-z-])\(([^)]+)\)`/%%\1(\2)/gi' " ../ ${ bi %%.tex } .md "
2013-09-28 09:13:07 +00:00
sed -Ei 's/\\$/\n/' " ../ ${ bi %%.tex } .md "
2013-09-02 17:13:32 +00:00
done
if [ ` find | wc -l` -gt 1 ]
then
git mv * ..
fi
2013-10-12 00:49:15 +00:00
cd - > /dev/null
2013-09-02 17:13:32 +00:00
if [ -f "mySubject.md" ]
then
git mv "mySubject.md" "main.md"
elif [ -f "mySlide.md" ]
then
git mv "mySlide.md" "main.md"
elif [ -f "mySlides.md" ]
then
git mv "mySlides.md" "main.md"
elif [ -f "myTutorial.md" ]
then
git mv "myTutorial.md" "main.md"
fi
rmdir include
}
TMPDIR = ` mktemp -d`
cd $TMPDIR
rmdir repo.git
if ! ( mkdir repo.git &&
cd repo.git &&
git init --bare &&
cd .. )
then
echo "Unable to create git final repository"
exit 2
fi
if ! hg clone " https://cpp.acu.epita.fr/projects/ $1 "
then
echo " Unable to clone $1 mercurial repository "
exit 3
fi
cd " $1 "
if ! hg push " $TMPDIR /repo.git "
then
echo "Unable to convert Mercurial to Git repository"
exit 4
fi
2013-10-12 00:49:15 +00:00
cd - > /dev/null
2013-09-02 17:13:32 +00:00
2013-10-12 00:49:15 +00:00
mv " $1 " " $1 .hg "
2013-09-02 17:13:32 +00:00
git clone " $TMPDIR /repo.git " " $1 "
cd " $TMPDIR / $1 "
# grades branch
if ls | grep "grades"
then
echo -e "\e[1;34m>>>\e[1;37m Creating grades branch...\e[0m"
git checkout -b grades
find -mindepth 1 -maxdepth 1 ! -name grades ! -name .git -exec git rm -rf { } \;
find -name '*.trace' -name '*.html' -name '*.yml' -exec git rm -rf { } \;
git rm -f grades/DESC 2> /dev/null
git commit -am "Converting HG to Git" > /dev/null
fi
git checkout master
# moulette branch
if ls | grep "moulette"
then
echo -e "\e[1;34m>>>\e[1;37m Creating moulette branch...\e[0m"
git checkout -b moulette
2013-09-28 09:13:07 +00:00
find -mindepth 1 -maxdepth 1 ! -name moulette ! -name tests ! -name .git -exec git rm -rf { } \;
2013-09-02 17:13:32 +00:00
git rm -f moulette/DESC 2> /dev/null
git commit -am "Converting HG to Git" > /dev/null
fi
git checkout master
find -type f ! -name '*.sh' ! -name '*.rb' ! -name '*.pl' ! -name 'configure' -exec chmod -x { } \;
echo
echo -e "\e[1;31m##\e[1;37m Removing ELF outside files/ \e[1;31m##\e[0m"
for d in ` find -mindepth 1 -maxdepth 1 -type d ! -name .git ! -name files`
do
for f in ` find " $d " -type f`
do
if [ ` file " $f " | cut -d " " -f 2` = "ELF" ]
then
git rm -f " $f "
fi
done
done
echo -e "\e[1;31m## ## ## ## ##\e[0m"
echo
echo -e "\e[1;31m##\e[1;37m Removing old and temporary files \e[1;31m##\e[0m"
git rm -f AUTHORS
git rm -f README
2013-09-28 09:13:07 +00:00
git rm -f UPDATE
2013-09-02 17:13:32 +00:00
git rm -f Makefile
git rm -f files/list
git rm -f "files/*.pdf"
find -name 'Changelog' -exec git rm -fr { } \;
find -name 'ChangeLog' -exec git rm -fr { } \;
find -name 'DESC' -exec git rm -fr { } \;
find -name '*.old' -exec git rm -fr { } \;
find -name '*.bak' -exec git rm -fr { } \;
2013-09-28 09:13:07 +00:00
find -name '*.vrb' -exec git rm -fr { } \;
2013-09-02 17:13:32 +00:00
find -name '*~' -exec git rm -fr { } \;
find -name '#*#' -exec git rm -fr { } \;
echo -e "\e[1;31m## ## ## ## ##\e[0m"
echo
for DIR in *
do
if [ " $DIR " = "defenses" ]
then
echo -e " \e[1;35m##\e[1;37m Find directory $DIR with some defense files \e[1;35m##\e[0m "
cd defenses
git rm -f Makefile > /dev/null
for D in *
do
if [ -f " $D /template.xml " ]
then
2013-10-12 00:49:15 +00:00
perl ` dirname $0 ` /defense_converter.pl -o " $D .xml " " $D /template.xml "
2013-09-02 17:13:32 +00:00
git add " $D .xml "
echo -e " \e[1;35m>>>\e[1;37m Defense converted:\e[0m $D "
fi
git rm -rf " $D " > /dev/null
done
2013-10-12 00:49:15 +00:00
cd - > /dev/null
2013-09-02 17:13:32 +00:00
echo -e "\e[1;35m## ## ## ## ##\e[0m"
echo
elif [ " $DIR " = "grades" ]
then
echo -e " \e[1;36m##\e[1;37m Find directory $DIR for grading \e[1;36m##\e[0m "
git rm -rf " $DIR "
echo -e "\e[1;36m## ## ## ## ##\e[0m"
echo
2013-09-28 09:13:07 +00:00
elif [ " $DIR " = "tests" ]
then
echo -e " \e[1;33m##\e[1;37m Find directory $DIR for moulette \e[1;33m##\e[0m "
git rm -rf " $DIR "
echo -e "\e[1;33m## ## ## ## ##\e[0m"
echo
2013-09-02 17:13:32 +00:00
elif find " $DIR " -type f -name '*.yml' | grep yml > /dev/null
then
echo -e " \e[1;33m##\e[1;37m Find directory $DIR with some .yml files \e[1;33m##\e[0m "
git rm -rf " $DIR "
echo -e "\e[1;33m## ## ## ## ##\e[0m"
echo
elif find " $DIR " -type f -name '*.tex' | grep tex > /dev/null
then
echo -e " \e[1;32m##\e[1;37m Find directory $DIR with some .tex files \e[1;32m##\e[0m "
cd " $DIR "
clean_tex " $DIR "
cd ..
echo -e "\e[1;32m## ## ## ## ##\e[0m"
echo
elif [ -d " $DIR " ]
then
cd " $DIR "
FILELIST = ""
if [ " $DIR " != "ref" ]
then
FILELIST = " $FILELIST Makefile "
fi
if [ " $DIR " != "tests" ]
then
FILELIST = " $FILELIST README "
fi
for f in $FILELIST
do
if [ -f " $f " ]
then
git rm -f " $f " > /dev/null
elif [ -d " $f " ]
then
git rm -rf " $f " > /dev/null
fi
done
2013-10-12 00:49:15 +00:00
cd - > /dev/null
2013-09-02 17:13:32 +00:00
fi
done
echo -e "\e[1;34m>>>\e[1;37m Adding .gitignore...\e[0m"
cat <<EOF > .gitignore
*.toc
*.aux
*.bat
*.glo
*.log
*#
*.snm
*.vrb
*.nav
*~
*.bbl
*.blg
.*.sw?
*.o
*.class
*.ghc
*.so
*.a
EOF
for f in ` find -name "README.txt" ` ` find -name "TODO.txt" ` ` find -name "AUTHORS.txt" `
do
git mv " $f " " ${ f %.txt } "
done
git add .gitignore
git commit -am "Converting HG to Git" > /dev/null
git remote remove origin
if [ -z " $2 " ]
then
git remote add origin " ssh://git@forge/subjects/ $1 "
else
git remote add origin " ssh://git@forge/subjects/ $2 "
fi
#rm -rf $TMPDIR
echo
echo -e " \e[1;37mYou can view $TMPDIR / $1 / directory\e[0m "