No description, website, or topics provided.
Switch branches/tags
Clone or download




  • Code is written in scala, C++ and perl.
  • For scala code, use sbt to build and run programs. It is the easiest
  • This code has only being tested under Linux, but it should run under MacOS


srcml sure srcml is in the path
bfg needs to be patched. see below


  1. you must fork bfg
  2. apply the patch found in the directory bfg.
  3. build


For each module, its dependencies are documented in their corresponding file.

How to build

  • use sbt to compile the scala code
  • use make to compile the C++ code
  • perl scripts can be run without compilation

How to use

This is the workflow to process a git repository with cregit, and to generate the HTML views of its contributions.

  • It assumes that the cregit-repository will be created in /tmp/xournal
  • The original repository is located at /home/dmg/git.hacking.mine/xournal

a. Create the view repository.

To tokenize the files we require to create some environment variables to communicate with the tokenizing script

BFG_MEMO_DIRdirectory to use for memoization of tokenized files
BFG_TOKENIZE_CMDcommand to use to tokenize, might include parameters


  • use the tokenizeByBlobId/ to do the tokenization
  • will execute
./ --srcml2token=<path to srcml2token> --srcml=<path to srcml> --ctags=<path to ctags-exuberant>

Run it as:

export BFG_MEMO_DIR=/tmp/memo
export BFG_TOKENIZE_CMD=/home/dmg/git.dmg/cregit-scala/tokenize/ --srcml2token=/home/dmg/git.dmg/cregit-scala/tokenize/srcMLtoken/srcml2token --srcml=srcml --ctags=ctags-exuberant
java -jar bfg-cregit.jar '--blob-exec:/home/dmg/git.dmg/cregit-scala/tokenizeByBlobId/[ch]$' --no-blob-protection /path/repo

b. Create the history database for the original repo

java -jar slickGitLog.jar /tmp/xournal-original.db /home/dmg/git.hacking.mine/xournal 

c. Create the history database for the cregit repo

java -jar slickGitLog.jar /tmp/xournal-cregit.db /tmp/xournal

d. Create the persons database

java -jar persons.jar /home/dmg/git.hacking.mine/xournal /tmp/xournal.xls /tmp/xournal-persons.db

e. Create blame of cregit files

perl --verbose --formatBlame=./ /tmp/xournal /tmp/blame '\.[ch]$'

f. create the table with the map from newcommits to commits

java -jar remapCommits.jar /tmp/xournal-cregit.db /tmp/xournal

g. Create html version of the files


perl ./ --verbose /tmp/xournal-cregit.db /tmp/xournal-persons.db ~/git.hacking.mine/xournal /tmp/blame /tmp/html '\.[ch]$' 


The license of Cregit is GPL-3.0+


  • create temporary files in TMP proper location
  • use preferred name in html files
  • create a driver program for processing an entire repository
  • customize programs to read a JSON file with configuration?