Providing additional churn metrics over the original metric_fu churn
Ruby
Switch branches/tags
Nothing to show
Pull request Compare This branch is 3 commits ahead, 149 commits behind danmayer:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
bin
lib
man
test
.document
.gitignore
Gemfile
Gemfile.lock
LICENSE
README.rdoc
Rakefile
VERSION
churn.gemspec

README.rdoc

churn

A Project to give the churn file, class, and method for a project for a given checkin Over time the tool adds up the history of chruns to give the number of times a file, class, or method is changing during the life of a project. Churn for files is immediate, but classes and methods requires buildings up a history using churn between revisions. The history is stored in ./tmp

Currently has full Git, Mercurial (hg), and Bazaar (bzr) support, and partial SVN support (supports only file level churn currently)

Authors:

  • danmayer

  • ajwalters

  • cldwalker

  • absurdhero

Execute with:

rake churn #after adding require 'lib/tasks/churn_tasks' to projects rakefile
churn

Example Output

**********************************************************************
* Revision Changes 
**********************************************************************
Files: 
+-------------------------------+
| file                          |
+-------------------------------+
| Rakefile                      |
| lib/churn/churn_calculator.rb |
+-------------------------------+

Classes: 
+-------------------------------+-----------------+
| file                          | klass           |
+-------------------------------+-----------------+
| lib/churn/churn_calculator.rb | ChurnCalculator |
+-------------------------------+-----------------+

Methods: 
+-------------------------------+-----------------+-------------------------------+
| file                          | klass           | method                        |
+-------------------------------+-----------------+-------------------------------+
| lib/churn/churn_calculator.rb | ChurnCalculator | ChurnCalculator#filters       |
| lib/churn/churn_calculator.rb | ChurnCalculator | ChurnCalculator#display_array |
| lib/churn/churn_calculator.rb | ChurnCalculator | ChurnCalculator#to_s          |
+-------------------------------+-----------------+-------------------------------+

**********************************************************************
* Project Churn 
**********************************************************************
Files: 
+------------------------------------+---------------+
| file_path                          | times_changed |
+------------------------------------+---------------+
| lib/churn/churn_calculator.rb      | 14            |
| README.rdoc                        | 7             |
| lib/tasks/churn_tasks.rb           | 6             |
| Rakefile                           | 6             |
| lib/churn/git_analyzer.rb          | 4             |
| VERSION                            | 4             |
| test/test_helper.rb                | 4             |
| test/unit/churn_calculator_test.rb | 3             |
| test/churn_test.rb                 | 3             |
+------------------------------------+---------------+ 

Classes: 
+-------------------------------+-----------------+---------------+
| file                          | klass           | times_changed |
+-------------------------------+-----------------+---------------+
| lib/churn/churn_calculator.rb | ChurnCalculator | 1             |
| lib/churn/churn_calculator.rb | ChurnCalculator | 1             |
+-------------------------------+-----------------+---------------+

Methods: 
+-------------------------------+-----------------+-----------------------------------------+---------------+
| file                          | klass           | method                                  | times_changed |
+-------------------------------+-----------------+-----------------------------------------+---------------+
| lib/churn/churn_calculator.rb | ChurnCalculator | ChurnCalculator#to_s                    | 1             |
| lib/churn/churn_calculator.rb | ChurnCalculator | ChurnCalculator#display_array           | 1             |
| lib/churn/churn_calculator.rb | ChurnCalculator | ChurnCalculator#calculate_revision_data | 1             |
| lib/churn/churn_calculator.rb | ChurnCalculator | ChurnCalculator#filters                 | 1             |
| lib/churn/churn_calculator.rb | ChurnCalculator | ChurnCalculator#initialize              | 1             |
| lib/churn/churn_calculator.rb | ChurnCalculator | ChurnCalculator#filters                 | 1             |
| lib/churn/churn_calculator.rb | ChurnCalculator | ChurnCalculator#to_s                    | 1             |
+-------------------------------+-----------------+-----------------------------------------+---------------+

TODO:

  • SVN only supports file, add full SVN support

  • support bazaar, cvs, and darcs

  • make storage directory configurable instead of using tmp

  • allow passing in directories to churn, directories to ignore

  • add a filter that allows for other files besides. *.rb

  • ignore files pattern, so you can ignore things like vendor/, lib/, or docs/

  • finish adding better documenation using YARD

  • better man page formatting from README (switch to markdown?)

  • rake task for building manpage (currently manually run ronn -b1 README.rdoc)

  • bug that reports '/dev/null' as a file during revision changes

  • don't output methods and classes on a commit that has none detected (css and view only commits, etc)

Executable Usage:

  • 'gem install churn'

  • go to project root run 'churn'

Rake Usage:

  • 'gem install churn'

  • on any project you want to use churn, add “require 'churn'” to your rake file

  • run 'rake churn' to view the current output, file churn history is immediate, class and method churn builds up a history as it is run on each revision

  • temporary files with class / method churn history are stored in /tmp, to clear churn history delete them

Note on Patches/Pull Requests

  • Fork the project.

  • Make your feature addition or bug fix.

  • Add tests for it. This is important so I don't break it in a future version unintentionally.

  • Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but

    bump version in a commit by itself I can ignore when I pull)
  • Send me a pull request. Bonus points for topic branches.

Copyright

Copyright © 2010 Dan Mayer. See LICENSE for details.