rscm 0.4.5 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGES +12 -0
- data/README +14 -0
- data/Rakefile +4 -24
- data/lib/rscm.rb +1 -2
- data/lib/rscm/base.rb +289 -281
- data/lib/rscm/command_line.rb +135 -112
- data/lib/rscm/revision.rb +63 -166
- data/lib/rscm/revision_file.rb +8 -2
- data/lib/rscm/revision_poller.rb +78 -67
- data/lib/rscm/revisions.rb +79 -0
- data/lib/rscm/scm/clearcase.rb +11 -9
- data/lib/rscm/scm/cvs.rb +374 -352
- data/lib/rscm/scm/cvs_log_parser.rb +1 -0
- data/lib/rscm/scm/darcs.rb +9 -0
- data/lib/rscm/scm/perforce.rb +216 -149
- data/lib/rscm/scm/subversion.rb +44 -24
- data/lib/rscm/scm/subversion_log_parser.rb +37 -51
- data/lib/rscm/time_ext.rb +0 -1
- data/lib/rscm/version.rb +2 -2
- data/test/rscm/command_line_test.rb +7 -5
- data/test/rscm/compatibility/config.yml +4 -4
- data/test/rscm/compatibility/cvs_metaproject/diff.txt +52 -0
- data/test/rscm/compatibility/cvs_metaproject/file.txt +48 -0
- data/test/rscm/compatibility/cvs_metaproject/old.yml +13 -0
- data/test/rscm/compatibility/full.rb +2 -223
- data/test/rscm/compatibility/p4_gfx/files_0.yml +10 -0
- data/test/rscm/compatibility/p4_gfx/old.yml +26 -0
- data/test/rscm/compatibility/p4_gfx/revisions.yml +24 -0
- data/test/rscm/compatibility/p4_gfx/scm.yml +4 -0
- data/test/rscm/compatibility/rscm_engine.rb +197 -0
- data/test/rscm/compatibility/subversion_rscm/diff.txt +12 -0
- data/test/rscm/compatibility/subversion_rscm/file.txt +567 -0
- data/test/rscm/compatibility/subversion_rscm/old.yml +14 -0
- data/test/rscm/compatibility/subversion_rscm/revisions.yml +17 -0
- data/test/rscm/compatibility/subversion_rscm/scm.yml +1 -0
- data/test/rscm/revision_file_test.rb +10 -0
- data/test/rscm/revision_poller_test.rb +91 -0
- data/test/rscm/revision_test.rb +22 -117
- data/test/rscm/revisions_test.rb +80 -0
- data/test/rscm/scm/cvs_log_parser_test.rb +569 -567
- data/test/rscm/scm/cvs_test.rb +6 -3
- data/test/rscm/scm/darcs_test.rb +4 -7
- data/test/rscm/scm/perforce_test.rb +6 -2
- data/test/rscm/scm/star_team_test.rb +10 -0
- data/test/rscm/scm/subversion_log_parser_test.rb +38 -5
- data/test/rscm/scm/subversion_test.rb +2 -3
- data/test/rscm/test_helper.rb +41 -2
- data/testproject/damagecontrolled/build.xml +154 -154
- data/testproject/damagecontrolled/src/java/com/thoughtworks/damagecontrolled/Thingy.java +6 -6
- metadata +19 -7
- data/lib/rscm/historic_file.rb +0 -30
- data/test/rscm/compatibility/damage_control_minimal.rb +0 -104
- data/test/rscm/revision_fixture.rb +0 -20
- data/test/rscm/revisions.yaml +0 -42
- data/test/rscm/scm/star_team.rb +0 -36
| @@ -41,6 +41,16 @@ revisions: | |
| 41 41 | 
             
              identifier: 156
         | 
| 42 42 | 
             
              message: reorganisations for compat suites
         | 
| 43 43 | 
             
              time: 2006-03-03 17:55:54 Z
         | 
| 44 | 
            +
              to_s: |
         | 
| 45 | 
            +
                156 | aslak | Fri Mar 03 17:55:54 UTC 2006 | reorganisations for compat suites
         | 
| 46 | 
            +
                 rscm/compatibility/damage_control_minimal.rb | 156
         | 
| 47 | 
            +
                 rscm/compatibility/full.rb | 156
         | 
| 48 | 
            +
                 rscm/generic_scm_tests.rb | 156
         | 
| 49 | 
            +
                 rscm/scm/cvs_log_parser_test.rb | 156
         | 
| 50 | 
            +
                 rscm/scm/cvs_test.rb | 156
         | 
| 51 | 
            +
                 rscm/scm/perforce_test.rb | 156
         | 
| 52 | 
            +
                 rscm/scm/subversion_test.rb | 156
         | 
| 53 | 
            +
             | 
| 44 54 | 
             
            - !ruby/object:RSCM::Revision 
         | 
| 45 55 | 
             
              developer: aslak
         | 
| 46 56 | 
             
              files: 
         | 
| @@ -67,3 +77,10 @@ revisions: | |
| 67 77 | 
             
              identifier: 157
         | 
| 68 78 | 
             
              message: Added settings for subversion dc compat test
         | 
| 69 79 | 
             
              time: 2006-03-03 18:24:07 Z
         | 
| 80 | 
            +
              to_s: |
         | 
| 81 | 
            +
                157 | aslak | Fri Mar 03 18:24:07 UTC 2006 | Added settings for subversion dc compat test
         | 
| 82 | 
            +
                 rscm/compatibility/damage_control_minimal.rb | 157
         | 
| 83 | 
            +
                 rscm/compatibility/subversion_rscm/files.yml | 157
         | 
| 84 | 
            +
                 rscm/compatibility/subversion_rscm/revisions.yml | 157
         | 
| 85 | 
            +
                 rscm/compatibility/subversion_rscm/scm.yml | 157
         | 
| 86 | 
            +
             | 
| @@ -0,0 +1,91 @@ | |
| 1 | 
            +
            require File.dirname(__FILE__) + '/test_helper'
         | 
| 2 | 
            +
            require 'rscm/revision_poller'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module RSCM
         | 
| 5 | 
            +
              class FakeScm
         | 
| 6 | 
            +
                include RevisionPoller
         | 
| 7 | 
            +
                
         | 
| 8 | 
            +
                ra = Revision.new(1,   Time.utc(2004, 6,12,0,0,0))
         | 
| 9 | 
            +
                rb = Revision.new(120, Time.utc(2004, 7,12,0,0,0))
         | 
| 10 | 
            +
                range_x = Array.new(120, ra);  range_x[-1] = rb
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                rc = Revision.new(121, Time.utc(2004, 8,12,0,0,0))
         | 
| 13 | 
            +
                rd = Revision.new(200, Time.utc(2004, 9,12,0,0,0))
         | 
| 14 | 
            +
                range_y = Array.new(80,  rc);  range_y[-1] = rd
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                re = Revision.new(201, Time.utc(2004,10,12,0,0,0))
         | 
| 17 | 
            +
                rf = Revision.new(240, Time.utc(2004,11,12,0,0,0))
         | 
| 18 | 
            +
                range_z = Array.new(40,  re);  range_z[-1] = rf
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                @@all_revisions = {}
         | 
| 21 | 
            +
                
         | 
| 22 | 
            +
                @@all_revisions[121] = Revisions.new(range_y)
         | 
| 23 | 
            +
                @@all_revisions[200] = Revisions.new(range_z)
         | 
| 24 | 
            +
                @@all_revisions[240] = Revisions.new()
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                @@all_revisions[Time.utc(2004,12,11,23,0,0)] = Revisions.new(range_z) #  1 hr back from re (201-240)
         | 
| 27 | 
            +
                @@all_revisions[Time.utc(2004,10,11,22,0,0)] = Revisions.new(range_y) #  2 hr back from rc (121-200)
         | 
| 28 | 
            +
                @@all_revisions[Time.utc(2004, 8,11,20,0,0)] = Revisions.new(range_x) #  4 hr back from ra (1-120)
         | 
| 29 | 
            +
                @@all_revisions[Time.utc(2004, 6,11,20,0,0)] = Revisions.new()        #  8 hr back from ra
         | 
| 30 | 
            +
                @@all_revisions[Time.utc(2004, 6,11,16,0,0)] = Revisions.new()        # 16 hr back from ra
         | 
| 31 | 
            +
                @@all_revisions[Time.utc(2004, 6,11, 8,0,0)] = Revisions.new()        # etc...
         | 
| 32 | 
            +
                @@all_revisions[Time.utc(2004, 6,10,16,0,0)] = Revisions.new() 
         | 
| 33 | 
            +
                @@all_revisions[Time.utc(2004, 6, 9, 8,0,0)] = Revisions.new() 
         | 
| 34 | 
            +
                @@all_revisions[Time.utc(2004, 6, 6,16,0,0)] = Revisions.new() 
         | 
| 35 | 
            +
                @@all_revisions[Time.utc(2004, 6, 1, 8,0,0)] = Revisions.new() 
         | 
| 36 | 
            +
                @@all_revisions[Time.utc(2004, 5,21,16,0,0)] = Revisions.new() 
         | 
| 37 | 
            +
                @@all_revisions[Time.utc(2004, 4,30, 8,0,0)] = Revisions.new() 
         | 
| 38 | 
            +
                @@all_revisions[Time.utc(2004, 3,18,16,0,0)] = Revisions.new() 
         | 
| 39 | 
            +
                @@all_revisions[Time.utc(2003,12,24, 8,0,0)] = Revisions.new() 
         | 
| 40 | 
            +
                @@all_revisions[Time.utc(2003, 7, 6,16,0,0)] = Revisions.new() 
         | 
| 41 | 
            +
                @@all_revisions[Time.utc(2002, 7,30, 8,0,0)] = Revisions.new() 
         | 
| 42 | 
            +
                @@all_revisions[Time.utc(2000, 9,15,16,0,0)] = Revisions.new() 
         | 
| 43 | 
            +
                @@all_revisions[Time.utc(1996,12,20, 8,0,0)] = Revisions.new() 
         | 
| 44 | 
            +
                @@all_revisions[Time.utc(1989, 6,29,16,0,0)] = Revisions.new() 
         | 
| 45 | 
            +
                @@all_revisions[Time.utc(1974, 7,17, 8,0,0)] = Revisions.new() 
         | 
| 46 | 
            +
                @@all_revisions[Time.epoch]                  = Revisions.new() 
         | 
| 47 | 
            +
                
         | 
| 48 | 
            +
                def revisions(from, options)
         | 
| 49 | 
            +
                  result = @@all_revisions[from]
         | 
| 50 | 
            +
                  if result.nil?
         | 
| 51 | 
            +
                    raise "No rev for time #{from.strftime('%Y,%m,%d,%H,%M,%S')}" if from.is_a?(Time)
         | 
| 52 | 
            +
                    raise "No rev for rev #{from.inspect}" if from.is_a?(Revision)
         | 
| 53 | 
            +
                  end
         | 
| 54 | 
            +
                  result
         | 
| 55 | 
            +
                end
         | 
| 56 | 
            +
              end
         | 
| 57 | 
            +
             | 
| 58 | 
            +
              class RevisionPollerTest < Test::Unit::TestCase    
         | 
| 59 | 
            +
                def test_should_poll_backwards
         | 
| 60 | 
            +
                  scm = FakeScm.new
         | 
| 61 | 
            +
                  callback_count = 0
         | 
| 62 | 
            +
                  scm.poll(Time.utc(2004,12,12,0,0,0), :backwards) do |revisions|
         | 
| 63 | 
            +
                    callback_count += 1
         | 
| 64 | 
            +
                  end
         | 
| 65 | 
            +
                  assert_equal 21, callback_count
         | 
| 66 | 
            +
                end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                def test_should_poll_forwards
         | 
| 69 | 
            +
                  scm = FakeScm.new
         | 
| 70 | 
            +
                  callback_count = 0
         | 
| 71 | 
            +
                  
         | 
| 72 | 
            +
                  rc = Revision.new(121, Time.utc(2004, 8,12,0,0,0))
         | 
| 73 | 
            +
                  now = Time.utc(2006, 4,12,11,51,43)
         | 
| 74 | 
            +
                  scm.poll(rc, :forwards, 1, now) do |revisions|
         | 
| 75 | 
            +
                    callback_count += 1
         | 
| 76 | 
            +
                  end
         | 
| 77 | 
            +
                  assert_equal 15, callback_count
         | 
| 78 | 
            +
                end
         | 
| 79 | 
            +
                
         | 
| 80 | 
            +
                def test_should_poll_forwards_upto_24_hours_from_identifier
         | 
| 81 | 
            +
                  scm = FakeScm.new
         | 
| 82 | 
            +
                  callback_count = 0
         | 
| 83 | 
            +
                  
         | 
| 84 | 
            +
                  now = Time.utc(2006, 4,12,11,51,43)
         | 
| 85 | 
            +
                  scm.poll(240, :forwards, 1, now) do |revisions|
         | 
| 86 | 
            +
                    callback_count += 1
         | 
| 87 | 
            +
                  end
         | 
| 88 | 
            +
                  assert_equal 6, callback_count
         | 
| 89 | 
            +
                end
         | 
| 90 | 
            +
              end
         | 
| 91 | 
            +
            end
         | 
    
        data/test/rscm/revision_test.rb
    CHANGED
    
    | @@ -1,129 +1,34 @@ | |
| 1 | 
            -
            require ' | 
| 2 | 
            -
            require 'rscm/ | 
| 1 | 
            +
            require File.dirname(__FILE__) + '/test_helper'
         | 
| 2 | 
            +
            require 'rscm/revision'
         | 
| 3 | 
            +
            require 'rscm/revision_file'
         | 
| 3 4 |  | 
| 4 5 | 
             
            module RSCM
         | 
| 5 | 
            -
              class RevisionTest < Test::Unit::TestCase
         | 
| 6 | 
            -
                 | 
| 7 | 
            -
             | 
| 8 | 
            -
                def setup
         | 
| 9 | 
            -
                  setup_changes
         | 
| 10 | 
            -
                end
         | 
| 11 | 
            -
                
         | 
| 12 | 
            -
                def test_convert_changes_to_revisions_should_match_user_message_and_timestamp_
         | 
| 13 | 
            -
                  revisions = Revisions.new
         | 
| 14 | 
            -
                  revisions.add(@change1)
         | 
| 15 | 
            -
                  revisions.add(@change2)
         | 
| 16 | 
            -
                  revisions.add(@change3)
         | 
| 17 | 
            -
                  revisions.add(@change4)
         | 
| 18 | 
            -
                  revisions.add(@change5)
         | 
| 19 | 
            -
                  revisions.add(@change6)
         | 
| 20 | 
            -
                  revisions.add(@change7)
         | 
| 21 | 
            -
             | 
| 22 | 
            -
                  revision_0 = Revision.new
         | 
| 23 | 
            -
                  revision_0 << @change1
         | 
| 24 | 
            -
                  revision_0 << @change2
         | 
| 25 | 
            -
                  
         | 
| 26 | 
            -
                  revision_1 = Revision.new
         | 
| 27 | 
            -
                  revision_1 << @change3
         | 
| 28 | 
            -
             | 
| 29 | 
            -
                  revision_2 = Revision.new
         | 
| 30 | 
            -
                  revision_2 << @change4
         | 
| 31 | 
            -
             | 
| 32 | 
            -
                  revision_3 = Revision.new
         | 
| 33 | 
            -
                  revision_3 << @change5
         | 
| 34 | 
            -
                  revision_3 << @change6
         | 
| 35 | 
            -
                  revision_3 << @change7
         | 
| 36 | 
            -
             | 
| 37 | 
            -
                  assert_equal(4, revisions.length)
         | 
| 38 | 
            -
             | 
| 39 | 
            -
                  expected_revisions = Revisions.new
         | 
| 40 | 
            -
                  expected_revisions.add(revision_0)
         | 
| 41 | 
            -
                  expected_revisions.add(revision_1)
         | 
| 42 | 
            -
                  expected_revisions.add(revision_2)
         | 
| 43 | 
            -
                  expected_revisions.add(revision_3)
         | 
| 44 | 
            -
             | 
| 45 | 
            -
                  assert_equal(expected_revisions, revisions)
         | 
| 46 | 
            -
                end
         | 
| 47 | 
            -
                
         | 
| 48 | 
            -
                def test_revisions_can_add_individual_changes_and_group_in_revision_instances
         | 
| 49 | 
            -
                  revisions = Revisions.new
         | 
| 50 | 
            -
                  assert(0, revisions.length)
         | 
| 6 | 
            +
              class RevisionTest < Test::Unit::TestCase    
         | 
| 7 | 
            +
                def test_accepts_files_in_range_and_reports_min_and_max
         | 
| 8 | 
            +
                  revision = Revision.new
         | 
| 51 9 |  | 
| 52 | 
            -
                   | 
| 53 | 
            -
                   | 
| 54 | 
            -
                   | 
| 55 | 
            -
             | 
| 56 | 
            -
                   | 
| 10 | 
            +
                  revision.add RevisionFile.new(nil, nil, nil, nil, nil, Time.utc(2004,11,11,12,12,12))
         | 
| 11 | 
            +
                  revision.add RevisionFile.new(nil, nil, nil, nil, nil, Time.utc(2004,11,11,12,13,12))
         | 
| 12 | 
            +
                  assert_raise(RuntimeError) do
         | 
| 13 | 
            +
                    revision.add RevisionFile.new(nil, nil, nil, nil, nil, Time.utc(2004,11,11,12,14,13))
         | 
| 14 | 
            +
                  end
         | 
| 57 15 |  | 
| 58 | 
            -
                   | 
| 59 | 
            -
                   | 
| 60 | 
            -
                   | 
| 61 | 
            -
                   | 
| 62 | 
            -
                  assert(1, hipp_hurra_revision.length)
         | 
| 63 | 
            -
                  assert(1, hipp_hurraX_revision.length)
         | 
| 64 | 
            -
             | 
| 65 | 
            -
                  assert_same(@change1, tjo_bing_revision[0])
         | 
| 66 | 
            -
                  assert_same(@change2, tjo_bing_revision[1])
         | 
| 67 | 
            -
                  assert_same(@change3, hipp_hurra_revision[0])
         | 
| 68 | 
            -
                  assert_same(@change4, hipp_hurraX_revision[0])
         | 
| 16 | 
            +
                  t12 = Time.utc(2004,11,11,12,12,12)
         | 
| 17 | 
            +
                  t13 = Time.utc(2004,11,11,12,13,12)
         | 
| 18 | 
            +
                  assert_equal(t12, revision.time(:min))
         | 
| 19 | 
            +
                  assert_equal(t13, revision.time(:max))
         | 
| 69 20 | 
             
                end
         | 
| 70 21 |  | 
| 71 | 
            -
                def  | 
| 72 | 
            -
                   | 
| 73 | 
            -
                  revisions.add(@change1)
         | 
| 74 | 
            -
                  revisions.add(@change4)
         | 
| 75 | 
            -
                  revisions.add(@change2)
         | 
| 76 | 
            -
                  revisions.add(@change7)
         | 
| 77 | 
            -
                  revisions.add(@change5)
         | 
| 78 | 
            -
                  revisions.add(@change3)
         | 
| 79 | 
            -
                  revisions.add(@change6)
         | 
| 80 | 
            -
                  
         | 
| 81 | 
            -
                  revisions = revisions.sort do |a,b|
         | 
| 82 | 
            -
                    a.time <=> b.time
         | 
| 83 | 
            -
                  end
         | 
| 84 | 
            -
                  assert_equal(4, revisions.length)
         | 
| 85 | 
            -
             | 
| 86 | 
            -
                  assert_equal(@change2.time, revisions[0].time)
         | 
| 87 | 
            -
                  assert_equal(@change7.time, revisions[-1].time)
         | 
| 22 | 
            +
                def test_should_be_equal_when_data_equal
         | 
| 23 | 
            +
                  assert_equal Revision.new, Revision.new
         | 
| 88 24 | 
             
                end
         | 
| 89 25 |  | 
| 90 | 
            -
                def  | 
| 91 | 
            -
                   | 
| 92 | 
            -
             | 
| 93 | 
            -
                  end
         | 
| 94 | 
            -
                  assert_equal("rinkrank", revisions[0][1].developer)
         | 
| 95 | 
            -
                  assert_equal("En to\ntre buksa \nned\n", revisions[0][1].message)
         | 
| 96 | 
            -
                end
         | 
| 97 | 
            -
                
         | 
| 98 | 
            -
                def test_reports_timestamp_of_latest_change
         | 
| 99 | 
            -
                  revision = Revision.new
         | 
| 100 | 
            -
                  revision << RevisionFile.new(nil, nil, nil, nil, nil, Time.utc(2004))
         | 
| 101 | 
            -
                  revision << RevisionFile.new(nil, nil, nil, nil, nil, Time.utc(2005))
         | 
| 102 | 
            -
                  revision << RevisionFile.new(nil, nil, nil, nil, nil, Time.utc(2003))
         | 
| 103 | 
            -
                  assert_equal(Time.utc(2005), revision.time)
         | 
| 104 | 
            -
                end
         | 
| 105 | 
            -
             | 
| 106 | 
            -
                def test_should_sort_revisions
         | 
| 107 | 
            -
                  revisions = Revisions.new
         | 
| 108 | 
            -
                  revisions.add(@change1)
         | 
| 109 | 
            -
                  revisions.add(@change4)
         | 
| 110 | 
            -
                  revisions.add(@change2)
         | 
| 111 | 
            -
                  revisions.add(@change7)
         | 
| 112 | 
            -
                  revisions.add(@change5)
         | 
| 113 | 
            -
                  revisions.add(@change3)
         | 
| 114 | 
            -
                  revisions.add(@change6)
         | 
| 115 | 
            -
                  
         | 
| 116 | 
            -
                  cs0 = revisions[0]
         | 
| 117 | 
            -
                  cs1 = revisions[1]
         | 
| 118 | 
            -
                  cs2 = revisions[2]
         | 
| 119 | 
            -
                  cs3 = revisions[3]
         | 
| 26 | 
            +
                def test_should_be_yamlable
         | 
| 27 | 
            +
                  r1 = Revision.new
         | 
| 28 | 
            +
                  r1.developer = "aslak"
         | 
| 120 29 |  | 
| 121 | 
            -
                   | 
| 122 | 
            -
                  assert_equal | 
| 123 | 
            -
                  assert_equal(cs1, reversed[2])
         | 
| 124 | 
            -
                  assert_equal(cs2, reversed[1])
         | 
| 125 | 
            -
                  assert_equal(cs3, reversed[0])
         | 
| 30 | 
            +
                  r2 = YAML::load(YAML::dump(r1))
         | 
| 31 | 
            +
                  assert_equal r1.developer, r2.developer
         | 
| 126 32 | 
             
                end
         | 
| 127 33 | 
             
              end
         | 
| 128 | 
            -
             | 
| 129 34 | 
             
            end
         | 
| @@ -0,0 +1,80 @@ | |
| 1 | 
            +
            require File.dirname(__FILE__) + '/test_helper'
         | 
| 2 | 
            +
            require 'rscm/revision'
         | 
| 3 | 
            +
            require 'rscm/revision_file'
         | 
| 4 | 
            +
            require 'rscm/revisions'
         | 
| 5 | 
            +
            require 'yaml'
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            module RSCM
         | 
| 8 | 
            +
              class RevisionsTest < Test::Unit::TestCase
         | 
| 9 | 
            +
                
         | 
| 10 | 
            +
                def setup
         | 
| 11 | 
            +
                  @revision_file1 = RSCM::RevisionFile.new("path/one", "MODIFIED",   "aslak",   "Fixed CATCH-22", 2, Time.utc(2004,7,5,12,0,2))
         | 
| 12 | 
            +
                  @revision_file2 = RSCM::RevisionFile.new("path/two", "MODIFIED",   "aslak",   "Fixed CATCH-22", 3, Time.utc(2004,7,5,12,1,2))
         | 
| 13 | 
            +
                  @revision_file3 = RSCM::RevisionFile.new("path/three", "MODIFIED", "aslak",   "Fixed CATCH-22", 4, Time.utc(2004,7,5,12,2,3))
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
                
         | 
| 16 | 
            +
                def test_adds_revision_files_to_revisions_as_needed
         | 
| 17 | 
            +
                  revisions = Revisions.new
         | 
| 18 | 
            +
                  revisions.add(@revision_file1)
         | 
| 19 | 
            +
                  revisions.add(@revision_file2)
         | 
| 20 | 
            +
                  revisions.add(@revision_file3)
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                  assert_equal(2, revisions.length)
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                  revision_0 = Revision.new
         | 
| 25 | 
            +
                  revision_0.add @revision_file1
         | 
| 26 | 
            +
                  revision_0.add @revision_file2
         | 
| 27 | 
            +
                  
         | 
| 28 | 
            +
                  revision_1 = Revision.new
         | 
| 29 | 
            +
                  revision_1.add @revision_file3
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                  expected_revisions = Revisions.new
         | 
| 32 | 
            +
                  expected_revisions.add revision_0
         | 
| 33 | 
            +
                  expected_revisions.add revision_1
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                  assert_equal(expected_revisions, revisions)
         | 
| 36 | 
            +
                end
         | 
| 37 | 
            +
                
         | 
| 38 | 
            +
                def test_should_sort_by_time
         | 
| 39 | 
            +
                  revisions = Revisions.new
         | 
| 40 | 
            +
                  revisions.add(@revision_file3)
         | 
| 41 | 
            +
                  revisions.add(@revision_file1)
         | 
| 42 | 
            +
                  revisions.add(@revision_file2)
         | 
| 43 | 
            +
                  
         | 
| 44 | 
            +
                  revisions = revisions.sort do |a,b|
         | 
| 45 | 
            +
                    a.time <=> b.time
         | 
| 46 | 
            +
                  end
         | 
| 47 | 
            +
                  assert_equal(2, revisions.length)
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                  assert_equal(@revision_file1.time, revisions[0].time(:min))
         | 
| 50 | 
            +
                  assert_equal(@revision_file2.time, revisions[0].time)
         | 
| 51 | 
            +
                  assert_equal(@revision_file3.time, revisions[1].time)
         | 
| 52 | 
            +
                end
         | 
| 53 | 
            +
                
         | 
| 54 | 
            +
                def test_should_be_equal_when_data_equal
         | 
| 55 | 
            +
                  r1 = Revisions.new
         | 
| 56 | 
            +
                  r1.add Revision.new
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                  r2 = Revisions.new
         | 
| 59 | 
            +
                  r2.add Revision.new
         | 
| 60 | 
            +
                
         | 
| 61 | 
            +
                  assert_equal r1, r2
         | 
| 62 | 
            +
                end
         | 
| 63 | 
            +
                
         | 
| 64 | 
            +
                def test_should_be_equal_after_yaml_serialization
         | 
| 65 | 
            +
                  revisions = Revisions.new
         | 
| 66 | 
            +
                  revisions.add(@revision_file3)
         | 
| 67 | 
            +
                  revisions.add(@revision_file1)
         | 
| 68 | 
            +
                  revisions.add(@revision_file2)
         | 
| 69 | 
            +
                  
         | 
| 70 | 
            +
                  revisions = revisions.sort do |a,b|
         | 
| 71 | 
            +
                    a.time <=> b.time
         | 
| 72 | 
            +
                  end
         | 
| 73 | 
            +
             | 
| 74 | 
            +
                  cp = YAML::load(YAML::dump(revisions))
         | 
| 75 | 
            +
                  assert_equal revisions[0][0].path, cp[0][0].path
         | 
| 76 | 
            +
                end
         | 
| 77 | 
            +
                
         | 
| 78 | 
            +
              end
         | 
| 79 | 
            +
             | 
| 80 | 
            +
            end
         | 
| @@ -1,567 +1,569 @@ | |
| 1 | 
            -
            require ' | 
| 2 | 
            -
            require 'stringio'
         | 
| 3 | 
            -
            require 'fileutils'
         | 
| 4 | 
            -
             | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
               | 
| 8 | 
            -
             | 
| 9 | 
            -
                 | 
| 10 | 
            -
                
         | 
| 11 | 
            -
             | 
| 12 | 
            -
                  @parser =  | 
| 13 | 
            -
                  @parser. | 
| 14 | 
            -
             | 
| 15 | 
            -
                 | 
| 16 | 
            -
                
         | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
                 | 
| 20 | 
            -
                
         | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
                     | 
| 24 | 
            -
                     | 
| 25 | 
            -
                    
         | 
| 26 | 
            -
                     | 
| 27 | 
            -
                    assert_match(/ | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
                 | 
| 31 | 
            -
                
         | 
| 32 | 
            -
                #  | 
| 33 | 
            -
                def  | 
| 34 | 
            -
                  File.open(File.dirname(__FILE__) + "/cvs-dataforge.log") do |io|
         | 
| 35 | 
            -
                    @parser = CvsLogParser.new(io)
         | 
| 36 | 
            -
                    revisions = @parser.parse_revisions
         | 
| 37 | 
            -
                    
         | 
| 38 | 
            -
                    assert_equal( | 
| 39 | 
            -
                  end
         | 
| 40 | 
            -
                end
         | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
             | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 52 | 
            -
             | 
| 53 | 
            -
             | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 56 | 
            -
             | 
| 57 | 
            -
             | 
| 58 | 
            -
             | 
| 59 | 
            -
             | 
| 60 | 
            -
             | 
| 61 | 
            -
             | 
| 62 | 
            -
             | 
| 63 | 
            -
             | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 66 | 
            -
             | 
| 67 | 
            -
             | 
| 68 | 
            -
             | 
| 69 | 
            -
             | 
| 70 | 
            -
             | 
| 71 | 
            -
             | 
| 72 | 
            -
             | 
| 73 | 
            -
             | 
| 74 | 
            -
             | 
| 75 | 
            -
                
         | 
| 76 | 
            -
             | 
| 77 | 
            -
             | 
| 78 | 
            -
             | 
| 79 | 
            -
             | 
| 80 | 
            -
             | 
| 81 | 
            -
             | 
| 82 | 
            -
             | 
| 83 | 
            -
             | 
| 84 | 
            -
             | 
| 85 | 
            -
             | 
| 86 | 
            -
             | 
| 87 | 
            -
             | 
| 88 | 
            -
             | 
| 89 | 
            -
             | 
| 90 | 
            -
             | 
| 91 | 
            -
             | 
| 92 | 
            -
             | 
| 93 | 
            -
             | 
| 94 | 
            -
             | 
| 95 | 
            -
             | 
| 96 | 
            -
             | 
| 97 | 
            -
             | 
| 98 | 
            -
             | 
| 99 | 
            -
                 | 
| 100 | 
            -
             | 
| 101 | 
            -
             | 
| 102 | 
            -
                  assert_equal(1,  | 
| 103 | 
            -
                  assert_equal(" | 
| 104 | 
            -
             | 
| 105 | 
            -
             | 
| 106 | 
            -
                
         | 
| 107 | 
            -
             | 
| 108 | 
            -
                   | 
| 109 | 
            -
                   | 
| 110 | 
            -
                  assert_equal( | 
| 111 | 
            -
                  assert_match(/ | 
| 112 | 
            -
             | 
| 113 | 
            -
             | 
| 114 | 
            -
             | 
| 115 | 
            -
             | 
| 116 | 
            -
             | 
| 117 | 
            -
             | 
| 118 | 
            -
             | 
| 119 | 
            -
             | 
| 120 | 
            -
             | 
| 121 | 
            -
             | 
| 122 | 
            -
             | 
| 123 | 
            -
             | 
| 124 | 
            -
             | 
| 125 | 
            -
             | 
| 126 | 
            -
             | 
| 127 | 
            -
             | 
| 128 | 
            -
             | 
| 129 | 
            -
             | 
| 130 | 
            -
             | 
| 131 | 
            -
             | 
| 132 | 
            -
             | 
| 133 | 
            -
             | 
| 134 | 
            -
             | 
| 135 | 
            -
             | 
| 136 | 
            -
             | 
| 137 | 
            -
             | 
| 138 | 
            -
             | 
| 139 | 
            -
                 | 
| 140 | 
            -
             | 
| 141 | 
            -
             | 
| 142 | 
            -
             | 
| 143 | 
            -
             | 
| 144 | 
            -
             | 
| 145 | 
            -
             | 
| 146 | 
            -
             | 
| 147 | 
            -
             | 
| 148 | 
            -
             | 
| 149 | 
            -
             | 
| 150 | 
            -
             | 
| 151 | 
            -
             | 
| 152 | 
            -
             | 
| 153 | 
            -
             | 
| 154 | 
            -
             | 
| 155 | 
            -
             | 
| 156 | 
            -
             | 
| 157 | 
            -
             | 
| 158 | 
            -
             | 
| 159 | 
            -
             | 
| 160 | 
            -
            ----------------------------
         | 
| 161 | 
            -
            revision 1. | 
| 162 | 
            -
            date:  | 
| 163 | 
            -
             | 
| 164 | 
            -
            ----------------------------
         | 
| 165 | 
            -
            revision 1. | 
| 166 | 
            -
            date:  | 
| 167 | 
            -
             | 
| 168 | 
            -
             | 
| 169 | 
            -
             | 
| 170 | 
            -
                 | 
| 171 | 
            -
                
         | 
| 172 | 
            -
             | 
| 173 | 
            -
             | 
| 174 | 
            -
             | 
| 175 | 
            -
                 | 
| 176 | 
            -
             | 
| 177 | 
            -
             | 
| 178 | 
            -
             | 
| 179 | 
            -
             | 
| 180 | 
            -
             | 
| 181 | 
            -
             | 
| 182 | 
            -
             | 
| 183 | 
            -
             | 
| 184 | 
            -
             | 
| 185 | 
            -
               | 
| 186 | 
            -
             | 
| 187 | 
            -
             | 
| 188 | 
            -
             | 
| 189 | 
            -
             | 
| 190 | 
            -
             | 
| 191 | 
            -
             | 
| 192 | 
            -
             | 
| 193 | 
            -
                  @parser | 
| 194 | 
            -
                  assert_equal( | 
| 195 | 
            -
                   | 
| 196 | 
            -
                  revisions | 
| 197 | 
            -
             | 
| 198 | 
            -
                  assert_equal(10, revisions.length)
         | 
| 199 | 
            -
                   | 
| 200 | 
            -
                   | 
| 201 | 
            -
                   | 
| 202 | 
            -
                   | 
| 203 | 
            -
                   | 
| 204 | 
            -
                   | 
| 205 | 
            -
                   | 
| 206 | 
            -
             | 
| 207 | 
            -
                  assert_equal( | 
| 208 | 
            -
                end
         | 
| 209 | 
            -
             | 
| 210 | 
            -
            LOG_FROM_05_07_2004_19_41 = <<-EOF
         | 
| 211 | 
            -
             | 
| 212 | 
            -
            RCS file: /scm/damagecontrol/damagecontrol/server/damagecontrol/scm/CVS.rb,v
         | 
| 213 | 
            -
            Working file: server/damagecontrol/scm/CVS.rb
         | 
| 214 | 
            -
            head: 1.19
         | 
| 215 | 
            -
            branch:
         | 
| 216 | 
            -
            locks: strict
         | 
| 217 | 
            -
            access list:
         | 
| 218 | 
            -
            symbolic names:
         | 
| 219 | 
            -
                    BEFORE_CENTRAL_REFACTORING: 1.1
         | 
| 220 | 
            -
            keyword substitution: kv
         | 
| 221 | 
            -
            total revisions: 19;    selected revisions: 19
         | 
| 222 | 
            -
            description:
         | 
| 223 | 
            -
            ----------------------------
         | 
| 224 | 
            -
            revision 1.19
         | 
| 225 | 
            -
            date: 2004/07/05 09:41:51;  author: tirsen;  state: Exp;  lines: +1 -1
         | 
| 226 | 
            -
            fixed some stuff in the log parser
         | 
| 227 | 
            -
            ----------------------------
         | 
| 228 | 
            -
            revision 1.18
         | 
| 229 | 
            -
            date: 2004/07/05 09:38:21;  author: tirsen;  state: Exp;  lines: +7 -6
         | 
| 230 | 
            -
            fixed some stuff in the log parser
         | 
| 231 | 
            -
            ----------------------------
         | 
| 232 | 
            -
            revision 1.17
         | 
| 233 | 
            -
            date: 2004/07/05 09:09:44;  author: tirsen;  state: Exp;  lines: +2 -0
         | 
| 234 | 
            -
            oops.... log parser can't actually log apparently, well, it can now...
         | 
| 235 | 
            -
            ----------------------------
         | 
| 236 | 
            -
            revision 1.16
         | 
| 237 | 
            -
            date: 2004/07/05 08:52:39;  author: tirsen;  state: Exp;  lines: +23 -26
         | 
| 238 | 
            -
            refactorings in the web
         | 
| 239 | 
            -
            fixed footer with css
         | 
| 240 | 
            -
            some other cssing around
         | 
| 241 | 
            -
            fixed cvs output so my irc client actually gives me a proper link I can click on
         | 
| 242 | 
            -
            ----------------------------
         | 
| 243 | 
            -
            revision 1.15
         | 
| 244 | 
            -
            date: 2004/07/04 18:04:38;  author: rinkrank;  state: Exp;  lines: +1 -1
         | 
| 245 | 
            -
            debug debug
         | 
| 246 | 
            -
            ----------------------------
         | 
| 247 | 
            -
            revision 1.14
         | 
| 248 | 
            -
            date: 2004/07/04 17:44:36;  author: rinkrank;  state: Exp;  lines: +23 -8
         | 
| 249 | 
            -
            improved error logging
         | 
| 250 | 
            -
            ----------------------------
         | 
| 251 | 
            -
            revision 1.13
         | 
| 252 | 
            -
            date: 2004/07/04 15:59:16;  author: rinkrank;  state: Exp;  lines: +1 -0
         | 
| 253 | 
            -
            debugging cvs timestamps
         | 
| 254 | 
            -
            ----------------------------
         | 
| 255 | 
            -
            revision 1.12
         | 
| 256 | 
            -
            date: 2004/07/03 19:25:19;  author: rinkrank;  state: Exp;  lines: +20 -3
         | 
| 257 | 
            -
            support for previous_native_revision_identifier in modifications
         | 
| 258 | 
            -
            ----------------------------
         | 
| 259 | 
            -
            revision 1.11
         | 
| 260 | 
            -
            date: 2004/07/02
         | 
| 261 | 
            -
            CVS and CC refactorings. Improved parsing of trigger command line and bootstrapping
         | 
| 262 | 
            -
            ----------------------------
         | 
| 263 | 
            -
            revision 1.1
         | 
| 264 | 
            -
            date: 2003/10/04 12:04:14;  author: tirsen;  state: Exp;
         | 
| 265 | 
            -
            Cleaned up the end-to-end test, did some more work on the CCLogPoller
         | 
| 266 | 
            -
            EOF
         | 
| 267 | 
            -
             | 
| 268 | 
            -
            LOG_ENTRY_FROM_06_07_2004_19_25_1 = <<EOF
         | 
| 269 | 
            -
            RCS file: /home/projects/jmock/scm/jmock/core/src/test/jmock/core/testsupport/MockInvocationMat
         | 
| 270 | 
            -
              V1_0_1: 1.4
         | 
| 271 | 
            -
              V1_0_0: 1.4
         | 
| 272 | 
            -
              V1_0_0_RC1: 1.4
         | 
| 273 | 
            -
              v1_0_0_RC1: 1.4
         | 
| 274 | 
            -
              before_removing_features_deprecated_pre_1_0_0: 1.1
         | 
| 275 | 
            -
            keyword substitution: kv
         | 
| 276 | 
            -
            total revisions: 4; selected revisions: 0
         | 
| 277 | 
            -
            description:
         | 
| 278 | 
            -
             | 
| 279 | 
            -
            EOF
         | 
| 280 | 
            -
             | 
| 281 | 
            -
                def test_can_parse_LOG_ENTRY_FROM_06_07_2004_19_25_1
         | 
| 282 | 
            -
                  @parser.cvspath = "/home/projects/jmock/scm/jmock"
         | 
| 283 | 
            -
                  @parser.cvsmodule = "core"
         | 
| 284 | 
            -
                  assert_equal("src/test/jmock/core/testsupport/MockInvocationMat", @parser.parse_path(LOG_ENTRY_FROM_06_07_2004_19_25_1))
         | 
| 285 | 
            -
                end
         | 
| 286 | 
            -
                
         | 
| 287 | 
            -
            LOG_ENTRY_FROM_06_07_2004_19_19 = <<EOF
         | 
| 288 | 
            -
            Working file: lib/xmlrpc/datetime.rb
         | 
| 289 | 
            -
            head: 1.1
         | 
| 290 | 
            -
            branch:
         | 
| 291 | 
            -
            locks: strict
         | 
| 292 | 
            -
            access list:
         | 
| 293 | 
            -
            symbolic names:
         | 
| 294 | 
            -
              BEFORE_CENTRAL_REFACTORING: 1.1
         | 
| 295 | 
            -
            keyword substitution: kv
         | 
| 296 | 
            -
            total revisions: 1; selected revisions: 0
         | 
| 297 | 
            -
            description:
         | 
| 298 | 
            -
             | 
| 299 | 
            -
            EOF
         | 
| 300 | 
            -
             | 
| 301 | 
            -
                def test_can_parse_LOG_ENTRY_FROM_06_07_2004_19_19
         | 
| 302 | 
            -
                  assert_equal("lib/xmlrpc/datetime.rb", @parser.parse_path(LOG_ENTRY_FROM_06_07_2004_19_19))
         | 
| 303 | 
            -
                end
         | 
| 304 | 
            -
                
         | 
| 305 | 
            -
            LOG_ENTRY_FROM_06_07_2004_19_25_2 = <<EOF
         | 
| 306 | 
            -
            RC
         | 
| 307 | 
            -
            Working file: website/templates/logo.gif
         | 
| 308 | 
            -
            head: 1.2
         | 
| 309 | 
            -
            branch:
         | 
| 310 | 
            -
            locks: strict
         | 
| 311 | 
            -
            access list:
         | 
| 312 | 
            -
            symbolic names:
         | 
| 313 | 
            -
              steves_easymock: 1.2.0.2
         | 
| 314 | 
            -
              Root_steves_easymock: 1.2
         | 
| 315 | 
            -
              V1_0_1: 1.2
         | 
| 316 | 
            -
              V1_0_0: 1.2
         | 
| 317 | 
            -
              V1_0_0_RC1: 1.2
         | 
| 318 | 
            -
              before_removing_features_deprecated_pre_1_0_0: 1.2
         | 
| 319 | 
            -
              pre-hotmock-syntax-change: 1.2
         | 
| 320 | 
            -
            keyword substitution: b
         | 
| 321 | 
            -
            total revisions: 2; selected revisions: 0
         | 
| 322 | 
            -
            description:
         | 
| 323 | 
            -
             | 
| 324 | 
            -
            EOF
         | 
| 325 | 
            -
             | 
| 326 | 
            -
                def test_can_parse_LOG_ENTRY_FROM_06_07_2004_19_25_2
         | 
| 327 | 
            -
                  assert_equal("website/templates/logo.gif", @parser.parse_path(LOG_ENTRY_FROM_06_07_2004_19_25_2))
         | 
| 328 | 
            -
                end
         | 
| 329 | 
            -
             | 
| 330 | 
            -
            LOG_WITH_DELETIONS= <<EOF
         | 
| 331 | 
            -
            RCS file: /home/projects/picocontainer/scm/java/Attic/build.xml,v
         | 
| 332 | 
            -
            Working file: build.xml
         | 
| 333 | 
            -
            head: 1.11
         | 
| 334 | 
            -
            branch:
         | 
| 335 | 
            -
            locks: strict
         | 
| 336 | 
            -
            access list:
         | 
| 337 | 
            -
            symbolic names:
         | 
| 338 | 
            -
                    MERGE_CONTAINER_AND_REGISTRY_REFACTORING_BRANCH: 1.10.0.2
         | 
| 339 | 
            -
                    BEFORE_MERGE_CONTAINER_AND_REGISTRY_REFACTORING_TAG: 1.10
         | 
| 340 | 
            -
                    BEFORE_MULTIPLE_CONSTRUCTORS: 1.10
         | 
| 341 | 
            -
            keyword substitution: kv
         | 
| 342 | 
            -
            total revisions: 11;    selected revisions: 2
         | 
| 343 | 
            -
            description:
         | 
| 344 | 
            -
            ----------------------------
         | 
| 345 | 
            -
            revision 1.11
         | 
| 346 | 
            -
            date: 2003/10/13 00:04:54 -0500;  author: rinkrank;  state: dead;  lines: +0 -0
         | 
| 347 | 
            -
            Obsolete
         | 
| 348 | 
            -
            ----------------------------
         | 
| 349 | 
            -
            revision 1.10
         | 
| 350 | 
            -
            date: 2003/07/25 16:32:39;  author: rinkrank;  state: Exp;  lines: +1 -1
         | 
| 351 | 
            -
            fixed broken url (NANO-8)
         | 
| 352 | 
            -
            =============================================================================
         | 
| 353 | 
            -
            EOF
         | 
| 354 | 
            -
             | 
| 355 | 
            -
                def test_can_parse_LOG_WITH_DELETIONS
         | 
| 356 | 
            -
                  @parser = CvsLogParser.new(StringIO.new(LOG_WITH_DELETIONS))
         | 
| 357 | 
            -
                  revisions = @parser.parse_revisions
         | 
| 358 | 
            -
                   | 
| 359 | 
            -
             | 
| 360 | 
            -
                   | 
| 361 | 
            -
             | 
| 362 | 
            -
                   | 
| 363 | 
            -
                  assert_equal( | 
| 364 | 
            -
                  assert_equal( | 
| 365 | 
            -
                  assert_equal(" | 
| 366 | 
            -
                  assert_equal( | 
| 367 | 
            -
                  assert_equal(" | 
| 368 | 
            -
                   | 
| 369 | 
            -
             | 
| 370 | 
            -
                   | 
| 371 | 
            -
             | 
| 372 | 
            -
                   | 
| 373 | 
            -
                  assert_equal( | 
| 374 | 
            -
                  assert_equal( | 
| 375 | 
            -
                  assert_equal(" | 
| 376 | 
            -
                  assert_equal( | 
| 377 | 
            -
                  assert_equal(" | 
| 378 | 
            -
                  assert_equal( | 
| 379 | 
            -
             | 
| 380 | 
            -
             | 
| 381 | 
            -
             | 
| 382 | 
            -
             | 
| 383 | 
            -
             | 
| 384 | 
            -
             | 
| 385 | 
            -
             | 
| 386 | 
            -
             | 
| 387 | 
            -
             | 
| 388 | 
            -
             | 
| 389 | 
            -
             | 
| 390 | 
            -
             | 
| 391 | 
            -
             | 
| 392 | 
            -
             | 
| 393 | 
            -
             | 
| 394 | 
            -
             | 
| 395 | 
            -
             | 
| 396 | 
            -
             | 
| 397 | 
            -
             | 
| 398 | 
            -
             | 
| 399 | 
            -
             | 
| 400 | 
            -
             | 
| 401 | 
            -
             | 
| 402 | 
            -
             | 
| 403 | 
            -
             | 
| 404 | 
            -
             | 
| 405 | 
            -
             | 
| 406 | 
            -
             | 
| 407 | 
            -
             | 
| 408 | 
            -
             | 
| 409 | 
            -
             | 
| 410 | 
            -
             | 
| 411 | 
            -
             | 
| 412 | 
            -
                   | 
| 413 | 
            -
             | 
| 414 | 
            -
             | 
| 415 | 
            -
             | 
| 416 | 
            -
             | 
| 417 | 
            -
             | 
| 418 | 
            -
             | 
| 419 | 
            -
             | 
| 420 | 
            -
             | 
| 421 | 
            -
             | 
| 422 | 
            -
             | 
| 423 | 
            -
             | 
| 424 | 
            -
             | 
| 425 | 
            -
             | 
| 426 | 
            -
             | 
| 427 | 
            -
             | 
| 428 | 
            -
             | 
| 429 | 
            -
             | 
| 430 | 
            -
             | 
| 431 | 
            -
             | 
| 432 | 
            -
             | 
| 433 | 
            -
             | 
| 434 | 
            -
             | 
| 435 | 
            -
             | 
| 436 | 
            -
             | 
| 437 | 
            -
             | 
| 438 | 
            -
             | 
| 439 | 
            -
             | 
| 440 | 
            -
             | 
| 441 | 
            -
             | 
| 442 | 
            -
             | 
| 443 | 
            -
             | 
| 444 | 
            -
             | 
| 445 | 
            -
             | 
| 446 | 
            -
             | 
| 447 | 
            -
             | 
| 448 | 
            -
             | 
| 449 | 
            -
             | 
| 450 | 
            -
             | 
| 451 | 
            -
             | 
| 452 | 
            -
             | 
| 453 | 
            -
             | 
| 454 | 
            -
             | 
| 455 | 
            -
             | 
| 456 | 
            -
             | 
| 457 | 
            -
             | 
| 458 | 
            -
             | 
| 459 | 
            -
                   | 
| 460 | 
            -
             | 
| 461 | 
            -
                  assert_equal(RevisionFile:: | 
| 462 | 
            -
                  assert_equal(RevisionFile:: | 
| 463 | 
            -
             | 
| 464 | 
            -
             | 
| 465 | 
            -
             | 
| 466 | 
            -
             | 
| 467 | 
            -
            #  | 
| 468 | 
            -
            #  | 
| 469 | 
            -
            #  | 
| 470 | 
            -
             | 
| 471 | 
            -
             | 
| 472 | 
            -
             | 
| 473 | 
            -
             | 
| 474 | 
            -
             | 
| 475 | 
            -
             | 
| 476 | 
            -
             | 
| 477 | 
            -
             | 
| 478 | 
            -
             | 
| 479 | 
            -
             | 
| 480 | 
            -
             | 
| 481 | 
            -
             | 
| 482 | 
            -
             | 
| 483 | 
            -
             | 
| 484 | 
            -
             | 
| 485 | 
            -
             | 
| 486 | 
            -
             | 
| 487 | 
            -
             | 
| 488 | 
            -
             | 
| 489 | 
            -
             | 
| 490 | 
            -
             | 
| 491 | 
            -
             | 
| 492 | 
            -
             | 
| 493 | 
            -
             | 
| 494 | 
            -
             | 
| 495 | 
            -
            CVS:  | 
| 496 | 
            -
             | 
| 497 | 
            -
            CVS: | 
| 498 | 
            -
             | 
| 499 | 
            -
            CVS:    | 
| 500 | 
            -
             | 
| 501 | 
            -
            CVS:  | 
| 502 | 
            -
             | 
| 503 | 
            -
            CVS: | 
| 504 | 
            -
             | 
| 505 | 
            -
            CVS:    | 
| 506 | 
            -
             | 
| 507 | 
            -
            CVS:  | 
| 508 | 
            -
             | 
| 509 | 
            -
            CVS: | 
| 510 | 
            -
             | 
| 511 | 
            -
            CVS:    | 
| 512 | 
            -
             | 
| 513 | 
            -
            CVS:    | 
| 514 | 
            -
             | 
| 515 | 
            -
            CVS:  | 
| 516 | 
            -
             | 
| 517 | 
            -
            CVS: | 
| 518 | 
            -
             | 
| 519 | 
            -
            CVS:    | 
| 520 | 
            -
             | 
| 521 | 
            -
            CVS:    | 
| 522 | 
            -
             | 
| 523 | 
            -
             | 
| 524 | 
            -
             | 
| 525 | 
            -
             | 
| 526 | 
            -
             | 
| 527 | 
            -
             | 
| 528 | 
            -
             | 
| 529 | 
            -
             | 
| 530 | 
            -
             | 
| 531 | 
            -
             | 
| 532 | 
            -
             | 
| 533 | 
            -
             | 
| 534 | 
            -
             | 
| 535 | 
            -
             | 
| 536 | 
            -
             | 
| 537 | 
            -
             | 
| 538 | 
            -
             | 
| 539 | 
            -
             | 
| 540 | 
            -
             | 
| 541 | 
            -
             | 
| 542 | 
            -
             | 
| 543 | 
            -
             | 
| 544 | 
            -
             | 
| 545 | 
            -
             | 
| 546 | 
            -
             | 
| 547 | 
            -
             | 
| 548 | 
            -
             | 
| 549 | 
            -
             | 
| 550 | 
            -
             | 
| 551 | 
            -
             | 
| 552 | 
            -
             | 
| 553 | 
            -
             | 
| 554 | 
            -
             | 
| 555 | 
            -
             | 
| 556 | 
            -
             | 
| 557 | 
            -
             | 
| 558 | 
            -
             | 
| 559 | 
            -
             | 
| 560 | 
            -
             | 
| 561 | 
            -
             | 
| 562 | 
            -
             | 
| 563 | 
            -
                   | 
| 564 | 
            -
             | 
| 565 | 
            -
             | 
| 566 | 
            -
             | 
| 567 | 
            -
             | 
| 1 | 
            +
            require File.dirname(__FILE__) + '/../test_helper'
         | 
| 2 | 
            +
            require 'stringio'
         | 
| 3 | 
            +
            require 'fileutils'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            module RSCM
         | 
| 6 | 
            +
              class CvsLogParserTest < Test::Unit::TestCase
         | 
| 7 | 
            +
              
         | 
| 8 | 
            +
                include FileUtils
         | 
| 9 | 
            +
                
         | 
| 10 | 
            +
                def setup
         | 
| 11 | 
            +
                  @parser = CvsLogParser.new(nil)
         | 
| 12 | 
            +
                  @parser.cvspath = "/scm/damagecontrol"
         | 
| 13 | 
            +
                  @parser.cvsmodule = "damagecontrol"
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
                
         | 
| 16 | 
            +
                def test_read_log_entry
         | 
| 17 | 
            +
                  assert_equal(nil, CvsLogParser.new(StringIO.new("")).next_log_entry)
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
                
         | 
| 20 | 
            +
                def test_parses_entire_log_into_revisions
         | 
| 21 | 
            +
                  File.open(File.dirname(__FILE__) + "/cvs-test.log") do |io|
         | 
| 22 | 
            +
                    @parser = CvsLogParser.new(io)
         | 
| 23 | 
            +
                    revisions = @parser.parse_revisions
         | 
| 24 | 
            +
                    
         | 
| 25 | 
            +
                    assert_equal(24, revisions.length)
         | 
| 26 | 
            +
                    assert_match(/o YAML config \(BuildBootstrapper\)/, revisions[1].message)
         | 
| 27 | 
            +
                    assert_match(/failure/, revisions[8].message)
         | 
| 28 | 
            +
                  end
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
                
         | 
| 31 | 
            +
                # http://jira.codehaus.org/browse/DC-312
         | 
| 32 | 
            +
                # Have to find the bottleneck. Might be in Revision/Revisions
         | 
| 33 | 
            +
                def SLOOOWtest_jira_dc_312
         | 
| 34 | 
            +
                  File.open(File.dirname(__FILE__) + "/cvs-dataforge.log") do |io|
         | 
| 35 | 
            +
                    @parser = CvsLogParser.new(io)
         | 
| 36 | 
            +
                    revisions = @parser.parse_revisions
         | 
| 37 | 
            +
                    
         | 
| 38 | 
            +
                    assert_equal(273, revisions.length)
         | 
| 39 | 
            +
                  end
         | 
| 40 | 
            +
                end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                    LOG_ENTRY = <<-EOF
         | 
| 43 | 
            +
            =============================================================================
         | 
| 44 | 
            +
             | 
| 45 | 
            +
            RCS file: /scm/damagecontrol/damagecontrol/src/ruby/damagecontrol/BuildExecutorTest.rb,v
         | 
| 46 | 
            +
            Working file: src/ruby/damagecontrol/BuildExecutorTest.rb
         | 
| 47 | 
            +
            head: 1.20
         | 
| 48 | 
            +
            branch:
         | 
| 49 | 
            +
            locks: strict
         | 
| 50 | 
            +
            access list:
         | 
| 51 | 
            +
            symbolic names:
         | 
| 52 | 
            +
            keyword substitution: kv
         | 
| 53 | 
            +
            total revisions: 20;    selected revisions: 4
         | 
| 54 | 
            +
            description:
         | 
| 55 | 
            +
            ----------------------------
         | 
| 56 | 
            +
            revision 1.20
         | 
| 57 | 
            +
            date: 2003/11/09 17:53:37;  author: tirsen;  state: Exp;  lines: +3 -4
         | 
| 58 | 
            +
            Quiet period is configurable for each project
         | 
| 59 | 
            +
            ----------------------------
         | 
| 60 | 
            +
            revision 1.19
         | 
| 61 | 
            +
            date: 2003/11/09 17:04:18;  author: tirsen;  state: Exp;  lines: +32 -2
         | 
| 62 | 
            +
            Quiet period implemented for BuildExecutor, but does not yet handle multiple projects (builds are not queued as before)
         | 
| 63 | 
            +
            ----------------------------
         | 
| 64 | 
            +
            revision 1.18
         | 
| 65 | 
            +
            date: 2003/11/09 15:51:50;  author: rinkrank;  state: Exp;  lines: +1 -2
         | 
| 66 | 
            +
            linux-windows galore
         | 
| 67 | 
            +
            ----------------------------
         | 
| 68 | 
            +
            revision 1.17
         | 
| 69 | 
            +
            date: 2003/11/09 15:00:06;  author: rinkrank;  state: Exp;  lines: +6 -8
         | 
| 70 | 
            +
            o YAML config (BuildBootstrapper)
         | 
| 71 | 
            +
            o EmailPublisher
         | 
| 72 | 
            +
            =============================================================================
         | 
| 73 | 
            +
            EOF
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                def test_parse_files
         | 
| 76 | 
            +
                  revisions = Revisions.new
         | 
| 77 | 
            +
                  @parser.parse_files(LOG_ENTRY, revisions)
         | 
| 78 | 
            +
                  assert_equal(4, revisions.length)
         | 
| 79 | 
            +
                  assert_equal("src/ruby/damagecontrol/BuildExecutorTest.rb", revisions[0][0].path)
         | 
| 80 | 
            +
                  assert_match(/linux-windows galore/, revisions[2].message)
         | 
| 81 | 
            +
                end
         | 
| 82 | 
            +
             | 
| 83 | 
            +
                CHANGE_ENTRY = <<-EOF
         | 
| 84 | 
            +
            revision 1.20
         | 
| 85 | 
            +
            date: 2003/11/09 17:53:37;  author: tirsen;  state: Exp;  lines: +3 -4
         | 
| 86 | 
            +
            Quiet period is configurable for each project
         | 
| 87 | 
            +
            EOF
         | 
| 88 | 
            +
             | 
| 89 | 
            +
                def test_can_split_entries_separated_by_line_of_dashes
         | 
| 90 | 
            +
                  entries = @parser.split_entries(LOG_ENTRY)
         | 
| 91 | 
            +
                  assert_equal(5, entries.length)
         | 
| 92 | 
            +
                  assert_equal(CHANGE_ENTRY, entries[1])
         | 
| 93 | 
            +
                end
         | 
| 94 | 
            +
                
         | 
| 95 | 
            +
                def test_sets_previous_native_revision_identifier_to_one_before_the_current
         | 
| 96 | 
            +
                  change = @parser.parse_file(CHANGE_ENTRY)
         | 
| 97 | 
            +
                  assert_equal("1.20", change.native_revision_identifier)
         | 
| 98 | 
            +
                  assert_equal("1.19", change.previous_native_revision_identifier)
         | 
| 99 | 
            +
                end
         | 
| 100 | 
            +
                
         | 
| 101 | 
            +
                def test_can_determine_previous_native_revision_identifiers_from_tricky_input
         | 
| 102 | 
            +
                  assert_equal("2.2.1.1", @parser.determine_previous_native_revision_identifier("2.2.1.2"))
         | 
| 103 | 
            +
                  assert_equal(nil, @parser.determine_previous_native_revision_identifier("2.2.1.1"))
         | 
| 104 | 
            +
                end
         | 
| 105 | 
            +
             | 
| 106 | 
            +
                def test_parse_file
         | 
| 107 | 
            +
                  change = @parser.parse_file(CHANGE_ENTRY)
         | 
| 108 | 
            +
                  assert_equal("1.20", change.native_revision_identifier)
         | 
| 109 | 
            +
                  assert_equal(Time.utc(2003,11,9,17,53,37), change.time)
         | 
| 110 | 
            +
                  assert_equal("tirsen", change.developer)
         | 
| 111 | 
            +
                  assert_match(/Quiet period is configurable for each project/, change.message)
         | 
| 112 | 
            +
                end
         | 
| 113 | 
            +
             | 
| 114 | 
            +
              LOG_ENTRY_WITH_DELETED_FILE = <<EOF
         | 
| 115 | 
            +
            RCS file: /scm/damagecontrol/damagecontrol/server/damagecontrol/Attic/codehaus.rb,v
         | 
| 116 | 
            +
            Working file: server/damagecontrol/codehaus.rb
         | 
| 117 | 
            +
            head: 1.23
         | 
| 118 | 
            +
            branch:
         | 
| 119 | 
            +
            locks: strict
         | 
| 120 | 
            +
            access list:
         | 
| 121 | 
            +
            keyword substitution: kv
         | 
| 122 | 
            +
            total revisions: 23;  selected revisions: 1
         | 
| 123 | 
            +
            description:
         | 
| 124 | 
            +
            ----------------------------
         | 
| 125 | 
            +
            revision 1.23
         | 
| 126 | 
            +
            date: 2004/07/13 07:56:26;  author: tirsen;  state: dead;  lines: +0 -0
         | 
| 127 | 
            +
            remove username check (doesn't work on beaver)
         | 
| 128 | 
            +
            I do really want to see the url in irc, it's very, very convenient. thank you very much ;-)
         | 
| 129 | 
            +
            EOF
         | 
| 130 | 
            +
             | 
| 131 | 
            +
                def test_can_parse_files_with_deleted_file
         | 
| 132 | 
            +
                  revisions = Revisions.new
         | 
| 133 | 
            +
                  @parser.parse_files(LOG_ENTRY_WITH_DELETED_FILE, revisions)
         | 
| 134 | 
            +
                  assert_equal(1, revisions.length)
         | 
| 135 | 
            +
                  assert_equal("server/damagecontrol/codehaus.rb", revisions[0][0].path)
         | 
| 136 | 
            +
                  assert_equal(RevisionFile::DELETED, revisions[0][0].status)
         | 
| 137 | 
            +
                end
         | 
| 138 | 
            +
                
         | 
| 139 | 
            +
                def test_log_from_e2e_test
         | 
| 140 | 
            +
                  @parser = CvsLogParser.new(StringIO.new(LOG_FROM_E2E_TEST))
         | 
| 141 | 
            +
                  revisions = @parser.parse_revisions
         | 
| 142 | 
            +
                  assert_equal(2, revisions.length)
         | 
| 143 | 
            +
                  assert_match(/foo/, revisions[1].message)
         | 
| 144 | 
            +
                  assert_match(/bar/, revisions[0].message)
         | 
| 145 | 
            +
                end
         | 
| 146 | 
            +
                
         | 
| 147 | 
            +
                LOG_FROM_E2E_TEST = <<-EOF
         | 
| 148 | 
            +
            =============================================================================
         | 
| 149 | 
            +
             | 
| 150 | 
            +
            RCS file: C:\projects\damagecontrol\target\temp_e2e_1081547757\repository/e2eproject/build.bat,v
         | 
| 151 | 
            +
            Working file: build.bat
         | 
| 152 | 
            +
            head: 1.2
         | 
| 153 | 
            +
            branch:
         | 
| 154 | 
            +
            locks: strict
         | 
| 155 | 
            +
            access list:
         | 
| 156 | 
            +
            symbolic names:
         | 
| 157 | 
            +
            keyword substitution: kv
         | 
| 158 | 
            +
            total revisions: 2;     selected revisions: 2
         | 
| 159 | 
            +
            description:
         | 
| 160 | 
            +
            ----------------------------
         | 
| 161 | 
            +
            revision 1.2
         | 
| 162 | 
            +
            date: 2004/04/09 21:56:47;  author: jtirsen;  state: Exp;  lines: +1 -1
         | 
| 163 | 
            +
            foo
         | 
| 164 | 
            +
            ----------------------------
         | 
| 165 | 
            +
            revision 1.1
         | 
| 166 | 
            +
            date: 2004/04/09 21:56:12;  author: jtirsen;  state: Exp;
         | 
| 167 | 
            +
            bar
         | 
| 168 | 
            +
            =============================================================================EOF
         | 
| 169 | 
            +
            EOF
         | 
| 170 | 
            +
                
         | 
| 171 | 
            +
                def test_can_parse_path
         | 
| 172 | 
            +
                  assert_equal("testdata/damagecontrolled/src/java/com/thoughtworks/damagecontrolled/Thingy.java", 
         | 
| 173 | 
            +
                    @parser.parse_path(LOG_ENTRY_FROM_05_07_2004_19_42))
         | 
| 174 | 
            +
                end
         | 
| 175 | 
            +
                
         | 
| 176 | 
            +
            LOG_ENTRY_FROM_05_07_2004_19_42 = <<-EOF
         | 
| 177 | 
            +
            RCS file: /scm/damagecontrol/damagecontrol/testdata/damagecontrolled/src/java/com/thoughtworks/damagecontrolled/Thingy.java,v
         | 
| 178 | 
            +
            Working file: testdata/damagecontrolled/src/java/com/thoughtworks/damagecontrolled/Thingy.java
         | 
| 179 | 
            +
            head: 1.1
         | 
| 180 | 
            +
            branch:
         | 
| 181 | 
            +
            locks: strict
         | 
| 182 | 
            +
            access list:
         | 
| 183 | 
            +
            symbolic names:
         | 
| 184 | 
            +
              BEFORE_CENTRAL_REFACTORING: 1.1
         | 
| 185 | 
            +
              RELEASE_0_1: 1.1
         | 
| 186 | 
            +
            keyword substitution: kv
         | 
| 187 | 
            +
            total revisions: 1; selected revisions: 1
         | 
| 188 | 
            +
            description:
         | 
| 189 | 
            +
            EOF
         | 
| 190 | 
            +
             | 
| 191 | 
            +
                def test_can_parse_LOG_FROM_05_07_2004_19_41
         | 
| 192 | 
            +
                  @parser = CvsLogParser.new(StringIO.new(LOG_FROM_05_07_2004_19_41))
         | 
| 193 | 
            +
                  assert_equal(11, @parser.split_entries(LOG_FROM_05_07_2004_19_41).size)
         | 
| 194 | 
            +
                  assert_equal("server/damagecontrol/scm/CVS.rb", @parser.parse_path(@parser.split_entries(LOG_FROM_05_07_2004_19_41)[0]))
         | 
| 195 | 
            +
                  revisions = @parser.parse_revisions
         | 
| 196 | 
            +
                  revisions.sort!
         | 
| 197 | 
            +
             | 
| 198 | 
            +
                  assert_equal(10, revisions.length)
         | 
| 199 | 
            +
                  expected_file = RevisionFile.new
         | 
| 200 | 
            +
                  expected_file.path = "server/damagecontrol/scm/CVS.rb"
         | 
| 201 | 
            +
                  expected_file.developer = "tirsen"
         | 
| 202 | 
            +
                  expected_file.message = "fixed some stuff in the log parser"
         | 
| 203 | 
            +
                  expected_file.native_revision_identifier =  "1.19"
         | 
| 204 | 
            +
                  expected_file.status =  "MODIFIED"
         | 
| 205 | 
            +
                  expected_file.time = Time.utc(2004, 7, 5, 9, 41, 51)
         | 
| 206 | 
            +
             | 
| 207 | 
            +
                  assert_equal(expected_file, revisions[9][0])
         | 
| 208 | 
            +
                end
         | 
| 209 | 
            +
             | 
| 210 | 
            +
            LOG_FROM_05_07_2004_19_41 = <<-EOF
         | 
| 211 | 
            +
             | 
| 212 | 
            +
            RCS file: /scm/damagecontrol/damagecontrol/server/damagecontrol/scm/CVS.rb,v
         | 
| 213 | 
            +
            Working file: server/damagecontrol/scm/CVS.rb
         | 
| 214 | 
            +
            head: 1.19
         | 
| 215 | 
            +
            branch:
         | 
| 216 | 
            +
            locks: strict
         | 
| 217 | 
            +
            access list:
         | 
| 218 | 
            +
            symbolic names:
         | 
| 219 | 
            +
                    BEFORE_CENTRAL_REFACTORING: 1.1
         | 
| 220 | 
            +
            keyword substitution: kv
         | 
| 221 | 
            +
            total revisions: 19;    selected revisions: 19
         | 
| 222 | 
            +
            description:
         | 
| 223 | 
            +
            ----------------------------
         | 
| 224 | 
            +
            revision 1.19
         | 
| 225 | 
            +
            date: 2004/07/05 09:41:51;  author: tirsen;  state: Exp;  lines: +1 -1
         | 
| 226 | 
            +
            fixed some stuff in the log parser
         | 
| 227 | 
            +
            ----------------------------
         | 
| 228 | 
            +
            revision 1.18
         | 
| 229 | 
            +
            date: 2004/07/05 09:38:21;  author: tirsen;  state: Exp;  lines: +7 -6
         | 
| 230 | 
            +
            fixed some stuff in the log parser
         | 
| 231 | 
            +
            ----------------------------
         | 
| 232 | 
            +
            revision 1.17
         | 
| 233 | 
            +
            date: 2004/07/05 09:09:44;  author: tirsen;  state: Exp;  lines: +2 -0
         | 
| 234 | 
            +
            oops.... log parser can't actually log apparently, well, it can now...
         | 
| 235 | 
            +
            ----------------------------
         | 
| 236 | 
            +
            revision 1.16
         | 
| 237 | 
            +
            date: 2004/07/05 08:52:39;  author: tirsen;  state: Exp;  lines: +23 -26
         | 
| 238 | 
            +
            refactorings in the web
         | 
| 239 | 
            +
            fixed footer with css
         | 
| 240 | 
            +
            some other cssing around
         | 
| 241 | 
            +
            fixed cvs output so my irc client actually gives me a proper link I can click on
         | 
| 242 | 
            +
            ----------------------------
         | 
| 243 | 
            +
            revision 1.15
         | 
| 244 | 
            +
            date: 2004/07/04 18:04:38;  author: rinkrank;  state: Exp;  lines: +1 -1
         | 
| 245 | 
            +
            debug debug
         | 
| 246 | 
            +
            ----------------------------
         | 
| 247 | 
            +
            revision 1.14
         | 
| 248 | 
            +
            date: 2004/07/04 17:44:36;  author: rinkrank;  state: Exp;  lines: +23 -8
         | 
| 249 | 
            +
            improved error logging
         | 
| 250 | 
            +
            ----------------------------
         | 
| 251 | 
            +
            revision 1.13
         | 
| 252 | 
            +
            date: 2004/07/04 15:59:16;  author: rinkrank;  state: Exp;  lines: +1 -0
         | 
| 253 | 
            +
            debugging cvs timestamps
         | 
| 254 | 
            +
            ----------------------------
         | 
| 255 | 
            +
            revision 1.12
         | 
| 256 | 
            +
            date: 2004/07/03 19:25:19;  author: rinkrank;  state: Exp;  lines: +20 -3
         | 
| 257 | 
            +
            support for previous_native_revision_identifier in modifications
         | 
| 258 | 
            +
            ----------------------------
         | 
| 259 | 
            +
            revision 1.11
         | 
| 260 | 
            +
            date: 2004/07/02
         | 
| 261 | 
            +
            CVS and CC refactorings. Improved parsing of trigger command line and bootstrapping
         | 
| 262 | 
            +
            ----------------------------
         | 
| 263 | 
            +
            revision 1.1
         | 
| 264 | 
            +
            date: 2003/10/04 12:04:14;  author: tirsen;  state: Exp;
         | 
| 265 | 
            +
            Cleaned up the end-to-end test, did some more work on the CCLogPoller
         | 
| 266 | 
            +
            EOF
         | 
| 267 | 
            +
             | 
| 268 | 
            +
            LOG_ENTRY_FROM_06_07_2004_19_25_1 = <<EOF
         | 
| 269 | 
            +
            RCS file: /home/projects/jmock/scm/jmock/core/src/test/jmock/core/testsupport/MockInvocationMat
         | 
| 270 | 
            +
              V1_0_1: 1.4
         | 
| 271 | 
            +
              V1_0_0: 1.4
         | 
| 272 | 
            +
              V1_0_0_RC1: 1.4
         | 
| 273 | 
            +
              v1_0_0_RC1: 1.4
         | 
| 274 | 
            +
              before_removing_features_deprecated_pre_1_0_0: 1.1
         | 
| 275 | 
            +
            keyword substitution: kv
         | 
| 276 | 
            +
            total revisions: 4; selected revisions: 0
         | 
| 277 | 
            +
            description:
         | 
| 278 | 
            +
             | 
| 279 | 
            +
            EOF
         | 
| 280 | 
            +
             | 
| 281 | 
            +
                def test_can_parse_LOG_ENTRY_FROM_06_07_2004_19_25_1
         | 
| 282 | 
            +
                  @parser.cvspath = "/home/projects/jmock/scm/jmock"
         | 
| 283 | 
            +
                  @parser.cvsmodule = "core"
         | 
| 284 | 
            +
                  assert_equal("src/test/jmock/core/testsupport/MockInvocationMat", @parser.parse_path(LOG_ENTRY_FROM_06_07_2004_19_25_1))
         | 
| 285 | 
            +
                end
         | 
| 286 | 
            +
                
         | 
| 287 | 
            +
            LOG_ENTRY_FROM_06_07_2004_19_19 = <<EOF
         | 
| 288 | 
            +
            Working file: lib/xmlrpc/datetime.rb
         | 
| 289 | 
            +
            head: 1.1
         | 
| 290 | 
            +
            branch:
         | 
| 291 | 
            +
            locks: strict
         | 
| 292 | 
            +
            access list:
         | 
| 293 | 
            +
            symbolic names:
         | 
| 294 | 
            +
              BEFORE_CENTRAL_REFACTORING: 1.1
         | 
| 295 | 
            +
            keyword substitution: kv
         | 
| 296 | 
            +
            total revisions: 1; selected revisions: 0
         | 
| 297 | 
            +
            description:
         | 
| 298 | 
            +
             | 
| 299 | 
            +
            EOF
         | 
| 300 | 
            +
             | 
| 301 | 
            +
                def test_can_parse_LOG_ENTRY_FROM_06_07_2004_19_19
         | 
| 302 | 
            +
                  assert_equal("lib/xmlrpc/datetime.rb", @parser.parse_path(LOG_ENTRY_FROM_06_07_2004_19_19))
         | 
| 303 | 
            +
                end
         | 
| 304 | 
            +
                
         | 
| 305 | 
            +
            LOG_ENTRY_FROM_06_07_2004_19_25_2 = <<EOF
         | 
| 306 | 
            +
            RC
         | 
| 307 | 
            +
            Working file: website/templates/logo.gif
         | 
| 308 | 
            +
            head: 1.2
         | 
| 309 | 
            +
            branch:
         | 
| 310 | 
            +
            locks: strict
         | 
| 311 | 
            +
            access list:
         | 
| 312 | 
            +
            symbolic names:
         | 
| 313 | 
            +
              steves_easymock: 1.2.0.2
         | 
| 314 | 
            +
              Root_steves_easymock: 1.2
         | 
| 315 | 
            +
              V1_0_1: 1.2
         | 
| 316 | 
            +
              V1_0_0: 1.2
         | 
| 317 | 
            +
              V1_0_0_RC1: 1.2
         | 
| 318 | 
            +
              before_removing_features_deprecated_pre_1_0_0: 1.2
         | 
| 319 | 
            +
              pre-hotmock-syntax-change: 1.2
         | 
| 320 | 
            +
            keyword substitution: b
         | 
| 321 | 
            +
            total revisions: 2; selected revisions: 0
         | 
| 322 | 
            +
            description:
         | 
| 323 | 
            +
             | 
| 324 | 
            +
            EOF
         | 
| 325 | 
            +
             | 
| 326 | 
            +
                def test_can_parse_LOG_ENTRY_FROM_06_07_2004_19_25_2
         | 
| 327 | 
            +
                  assert_equal("website/templates/logo.gif", @parser.parse_path(LOG_ENTRY_FROM_06_07_2004_19_25_2))
         | 
| 328 | 
            +
                end
         | 
| 329 | 
            +
             | 
| 330 | 
            +
            LOG_WITH_DELETIONS= <<EOF
         | 
| 331 | 
            +
            RCS file: /home/projects/picocontainer/scm/java/Attic/build.xml,v
         | 
| 332 | 
            +
            Working file: build.xml
         | 
| 333 | 
            +
            head: 1.11
         | 
| 334 | 
            +
            branch:
         | 
| 335 | 
            +
            locks: strict
         | 
| 336 | 
            +
            access list:
         | 
| 337 | 
            +
            symbolic names:
         | 
| 338 | 
            +
                    MERGE_CONTAINER_AND_REGISTRY_REFACTORING_BRANCH: 1.10.0.2
         | 
| 339 | 
            +
                    BEFORE_MERGE_CONTAINER_AND_REGISTRY_REFACTORING_TAG: 1.10
         | 
| 340 | 
            +
                    BEFORE_MULTIPLE_CONSTRUCTORS: 1.10
         | 
| 341 | 
            +
            keyword substitution: kv
         | 
| 342 | 
            +
            total revisions: 11;    selected revisions: 2
         | 
| 343 | 
            +
            description:
         | 
| 344 | 
            +
            ----------------------------
         | 
| 345 | 
            +
            revision 1.11
         | 
| 346 | 
            +
            date: 2003/10/13 00:04:54 -0500;  author: rinkrank;  state: dead;  lines: +0 -0
         | 
| 347 | 
            +
            Obsolete
         | 
| 348 | 
            +
            ----------------------------
         | 
| 349 | 
            +
            revision 1.10
         | 
| 350 | 
            +
            date: 2003/07/25 16:32:39;  author: rinkrank;  state: Exp;  lines: +1 -1
         | 
| 351 | 
            +
            fixed broken url (NANO-8)
         | 
| 352 | 
            +
            =============================================================================
         | 
| 353 | 
            +
            EOF
         | 
| 354 | 
            +
             | 
| 355 | 
            +
                def test_can_parse_LOG_WITH_DELETIONS
         | 
| 356 | 
            +
                  @parser = CvsLogParser.new(StringIO.new(LOG_WITH_DELETIONS))
         | 
| 357 | 
            +
                  revisions = @parser.parse_revisions
         | 
| 358 | 
            +
                  revisions.sort!
         | 
| 359 | 
            +
             | 
| 360 | 
            +
                  assert_equal(2, revisions.length)
         | 
| 361 | 
            +
             | 
| 362 | 
            +
                  revision_delete = revisions[1]
         | 
| 363 | 
            +
                  assert_equal(Time.utc(2003,10,13,05,04,54,0), revision_delete.time)
         | 
| 364 | 
            +
                  assert_equal("Obsolete", revision_delete.message)
         | 
| 365 | 
            +
                  assert_equal("rinkrank", revision_delete.developer)
         | 
| 366 | 
            +
                  assert_equal(1, revision_delete.length)
         | 
| 367 | 
            +
                  assert_equal("build.xml", revision_delete[0].path)
         | 
| 368 | 
            +
                  assert_equal("1.11", revision_delete[0].native_revision_identifier)
         | 
| 369 | 
            +
                  assert_equal("1.10", revision_delete[0].previous_native_revision_identifier)
         | 
| 370 | 
            +
                  assert(RevisionFile::DELETED, revision_delete[0].status)
         | 
| 371 | 
            +
             | 
| 372 | 
            +
                  revision_fix_url = revisions[0]
         | 
| 373 | 
            +
                  assert_equal(Time.utc(2003,07,25,16,32,39,0), revision_fix_url.time)
         | 
| 374 | 
            +
                  assert_equal("fixed broken url (NANO-8)", revision_fix_url.message)
         | 
| 375 | 
            +
                  assert_equal("rinkrank", revision_fix_url.developer)
         | 
| 376 | 
            +
                  assert_equal(1, revision_fix_url.length)
         | 
| 377 | 
            +
                  assert_equal("build.xml", revision_fix_url[0].path)
         | 
| 378 | 
            +
                  assert_equal("1.10", revision_fix_url[0].native_revision_identifier)
         | 
| 379 | 
            +
                  assert_equal("1.9", revision_fix_url[0].previous_native_revision_identifier)
         | 
| 380 | 
            +
                  assert_equal(RevisionFile::MODIFIED, revision_fix_url[0].status)
         | 
| 381 | 
            +
                end
         | 
| 382 | 
            +
             | 
| 383 | 
            +
            LOG_WITH_MISSING_ENTRIES = <<EOF
         | 
| 384 | 
            +
            RCS file: /cvsroot/damagecontrol/damagecontrol/Attic/build.xml,v
         | 
| 385 | 
            +
            Working file: build.xml
         | 
| 386 | 
            +
            head: 1.2
         | 
| 387 | 
            +
            branch:
         | 
| 388 | 
            +
            locks: strict
         | 
| 389 | 
            +
            access list:
         | 
| 390 | 
            +
            symbolic names:
         | 
| 391 | 
            +
              initial-import: 1.1.1.1
         | 
| 392 | 
            +
              mgm: 1.1.1
         | 
| 393 | 
            +
            keyword substitution: kv
         | 
| 394 | 
            +
            total revisions: 3; selected revisions: 0
         | 
| 395 | 
            +
            description:
         | 
| 396 | 
            +
            =============================================================================
         | 
| 397 | 
            +
             | 
| 398 | 
            +
            RCS file: /cvsroot/damagecontrol/damagecontrol/maven.xml,v
         | 
| 399 | 
            +
            Working file: maven.xml
         | 
| 400 | 
            +
            head: 1.2
         | 
| 401 | 
            +
            branch:
         | 
| 402 | 
            +
            locks: strict
         | 
| 403 | 
            +
            access list:
         | 
| 404 | 
            +
            symbolic names:
         | 
| 405 | 
            +
            keyword substitution: kv
         | 
| 406 | 
            +
            total revisions: 2; selected revisions: 0
         | 
| 407 | 
            +
            description:
         | 
| 408 | 
            +
            =============================================================================
         | 
| 409 | 
            +
            EOF
         | 
| 410 | 
            +
             | 
| 411 | 
            +
                def test_can_parse_LOG_WITH_MISSING_ENTRIES
         | 
| 412 | 
            +
                  @parser = CvsLogParser.new(StringIO.new(LOG_WITH_MISSING_ENTRIES))
         | 
| 413 | 
            +
                  revisions = @parser.parse_revisions
         | 
| 414 | 
            +
                  assert_equal(0, revisions.length)
         | 
| 415 | 
            +
                end
         | 
| 416 | 
            +
              
         | 
| 417 | 
            +
            LOG_WITH_NEW_AND_OLD_FILE = <<EOF
         | 
| 418 | 
            +
            RCS file: /home/projects/damagecontrol/scm/damagecontrol/dummy.txt,v
         | 
| 419 | 
            +
            Working file: dummy.txt
         | 
| 420 | 
            +
            head: 1.1
         | 
| 421 | 
            +
            branch:
         | 
| 422 | 
            +
            locks: strict
         | 
| 423 | 
            +
            access list:
         | 
| 424 | 
            +
            keyword substitution: kv
         | 
| 425 | 
            +
            total revisions: 1;     selected revisions: 1
         | 
| 426 | 
            +
            description:
         | 
| 427 | 
            +
            ----------------------------
         | 
| 428 | 
            +
            revision 1.1
         | 
| 429 | 
            +
            date: 2004/07/13 21:50:59;  author: rinkrank;  state: Exp;
         | 
| 430 | 
            +
            Debug. Need to see what the log looks like for a new file.
         | 
| 431 | 
            +
            =============================================================================
         | 
| 432 | 
            +
             | 
| 433 | 
            +
            RCS file: /home/projects/damagecontrol/scm/damagecontrol/license.txt,v
         | 
| 434 | 
            +
            Working file: license.txt
         | 
| 435 | 
            +
            head: 1.4
         | 
| 436 | 
            +
            branch:
         | 
| 437 | 
            +
            locks: strict
         | 
| 438 | 
            +
            access list:
         | 
| 439 | 
            +
            keyword substitution: kv
         | 
| 440 | 
            +
            total revisions: 4;     selected revisions: 4
         | 
| 441 | 
            +
            description:
         | 
| 442 | 
            +
            ----------------------------
         | 
| 443 | 
            +
            revision 1.101
         | 
| 444 | 
            +
            date: 2004/07/10 17:41:14;  author: rinkrank;  state: Exp;  lines: +2 -2
         | 
| 445 | 
            +
            typo
         | 
| 446 | 
            +
            ----------------------------
         | 
| 447 | 
            +
            revision 1.11
         | 
| 448 | 
            +
            date: 2004/07/10 17:38:22;  author: rinkrank;  state: Exp;  lines: +2 -2
         | 
| 449 | 
            +
            fixed http://jira.codehaus.org/browse/DC-123
         | 
| 450 | 
            +
            ----------------------------
         | 
| 451 | 
            +
            revision 1.1
         | 
| 452 | 
            +
            date: 2004/07/02 08:42:51;  author: tirsen;  state: Exp;
         | 
| 453 | 
            +
            installer!!!!!! it's getting close to release!!!
         | 
| 454 | 
            +
            =============================================================================
         | 
| 455 | 
            +
            EOF
         | 
| 456 | 
            +
             | 
| 457 | 
            +
                def test_can_distinguish_new_file_from_old_file
         | 
| 458 | 
            +
                  @parser = CvsLogParser.new(StringIO.new(LOG_WITH_NEW_AND_OLD_FILE))
         | 
| 459 | 
            +
                  revisions = @parser.parse_revisions
         | 
| 460 | 
            +
             | 
| 461 | 
            +
                  assert_equal(RevisionFile::ADDED,    revisions[0][0].status)
         | 
| 462 | 
            +
                  assert_equal(RevisionFile::MODIFIED, revisions[1][0].status)
         | 
| 463 | 
            +
                  assert_equal(RevisionFile::MODIFIED, revisions[2][0].status)
         | 
| 464 | 
            +
                  assert_equal(RevisionFile::ADDED,    revisions[3][0].status)
         | 
| 465 | 
            +
                end
         | 
| 466 | 
            +
             | 
| 467 | 
            +
            # https://sitemesh.dev.java.net/source/browse/sitemesh/.cvsignore
         | 
| 468 | 
            +
            # The default commit message probably showed up in vi, and the committer
         | 
| 469 | 
            +
            # probably just left it there. Not sure why CVS kept it this way
         | 
| 470 | 
            +
            # (lines starting with CVS: should be ignored in commit message afaik).
         | 
| 471 | 
            +
            # Anyway, the parser now knows how to deal with this. (AH)
         | 
| 472 | 
            +
            LOG_WITH_WEIRD_CVS_AND_MANY_DASHES = <<EOF
         | 
| 473 | 
            +
            ? log.txt
         | 
| 474 | 
            +
             | 
| 475 | 
            +
            RCS file: /cvs/sitemesh/.cvsignore,v
         | 
| 476 | 
            +
            Working file: .cvsignore
         | 
| 477 | 
            +
            head: 1.3
         | 
| 478 | 
            +
            branch:
         | 
| 479 | 
            +
            locks: strict
         | 
| 480 | 
            +
            access list:
         | 
| 481 | 
            +
            keyword substitution: kv
         | 
| 482 | 
            +
            total revisions: 3; selected revisions: 3
         | 
| 483 | 
            +
            description:
         | 
| 484 | 
            +
            ----------------------------
         | 
| 485 | 
            +
            revision 1.3
         | 
| 486 | 
            +
            date: 2004/05/03 09:03:56;  author: rhallier;  state: Exp;  lines: +2 -0
         | 
| 487 | 
            +
            Issue number:  SIM-90
         | 
| 488 | 
            +
             | 
| 489 | 
            +
            Obtained from: JIRA
         | 
| 490 | 
            +
             | 
| 491 | 
            +
            Submitted by:  rhallier
         | 
| 492 | 
            +
             | 
| 493 | 
            +
            Reviewed by:   
         | 
| 494 | 
            +
             | 
| 495 | 
            +
            CVS: ----------------------------------------------------------------------
         | 
| 496 | 
            +
             | 
| 497 | 
            +
            CVS: Issue number:
         | 
| 498 | 
            +
             | 
| 499 | 
            +
            CVS:   If this change addresses one or more issues,
         | 
| 500 | 
            +
             | 
| 501 | 
            +
            CVS:   then enter the issue number(s) here.
         | 
| 502 | 
            +
             | 
| 503 | 
            +
            CVS: Obtained from:
         | 
| 504 | 
            +
             | 
| 505 | 
            +
            CVS:   If this change has been taken from another system,
         | 
| 506 | 
            +
             | 
| 507 | 
            +
            CVS:   then name the system in this line, otherwise delete it.
         | 
| 508 | 
            +
             | 
| 509 | 
            +
            CVS: Submitted by:
         | 
| 510 | 
            +
             | 
| 511 | 
            +
            CVS:   If this code has been contributed to the project by someone else; i.e.,
         | 
| 512 | 
            +
             | 
| 513 | 
            +
            CVS:   they sent us a patch or a set of diffs, then include their name/email
         | 
| 514 | 
            +
             | 
| 515 | 
            +
            CVS:   address here. If this is your work then delete this line.
         | 
| 516 | 
            +
             | 
| 517 | 
            +
            CVS: Reviewed by:
         | 
| 518 | 
            +
             | 
| 519 | 
            +
            CVS:   If we are doing pre-commit code reviews and someone else has
         | 
| 520 | 
            +
             | 
| 521 | 
            +
            CVS:   reviewed your changes, include their name(s) here.
         | 
| 522 | 
            +
             | 
| 523 | 
            +
            CVS:   If you have not had it reviewed then delete this line.
         | 
| 524 | 
            +
            ----------------------------
         | 
| 525 | 
            +
            revision 1.2
         | 
| 526 | 
            +
            date: 2003/11/22 07:56:51;  author: hani;  state: Exp;  lines: +2 -1
         | 
| 527 | 
            +
            Ignore IDEA files
         | 
| 528 | 
            +
            ----------------------------
         | 
| 529 | 
            +
            revision 1.1
         | 
| 530 | 
            +
            date: 2003/11/03 16:27:37;  author: mbogaert;  state: Exp;
         | 
| 531 | 
            +
            Moved from SF.
         | 
| 532 | 
            +
            =============================================================================
         | 
| 533 | 
            +
             | 
| 534 | 
            +
            RCS file: /cvs/sitemesh/CHANGES.txt,v
         | 
| 535 | 
            +
            Working file: CHANGES.txt
         | 
| 536 | 
            +
            head: 1.3
         | 
| 537 | 
            +
            branch:
         | 
| 538 | 
            +
            locks: strict
         | 
| 539 | 
            +
            access list:
         | 
| 540 | 
            +
            keyword substitution: kv
         | 
| 541 | 
            +
            total revisions: 3; selected revisions: 3
         | 
| 542 | 
            +
            description:
         | 
| 543 | 
            +
            ----------------------------
         | 
| 544 | 
            +
            revision 1.3
         | 
| 545 | 
            +
            date: 2004/10/08 07:18:38;  author: hani;  state: Exp;  lines: +18 -0
         | 
| 546 | 
            +
            More files not updated for release
         | 
| 547 | 
            +
            ----------------------------
         | 
| 548 | 
            +
            revision 1.2
         | 
| 549 | 
            +
            date: 2004/09/24 14:04:12;  author: jwalnes1;  state: Exp;  lines: +19 -0
         | 
| 550 | 
            +
            Preparing for 2.2 release.
         | 
| 551 | 
            +
            Issue number:
         | 
| 552 | 
            +
            Obtained from:
         | 
| 553 | 
            +
            Submitted by:
         | 
| 554 | 
            +
            Reviewed by:
         | 
| 555 | 
            +
            ----------------------------
         | 
| 556 | 
            +
            revision 1.1
         | 
| 557 | 
            +
            date: 2004/07/22 01:30:27;  author: farkas;  state: Exp;
         | 
| 558 | 
            +
            Final changes for 2.1 release
         | 
| 559 | 
            +
            =============================================================================
         | 
| 560 | 
            +
            EOF
         | 
| 561 | 
            +
             | 
| 562 | 
            +
                def test_can_parse_logs_with_cvs_and_dashes_in_commit_message
         | 
| 563 | 
            +
                  @parser = CvsLogParser.new(StringIO.new(LOG_WITH_WEIRD_CVS_AND_MANY_DASHES))
         | 
| 564 | 
            +
                  revisions = @parser.parse_revisions
         | 
| 565 | 
            +
                  assert_equal(6, revisions.length)
         | 
| 566 | 
            +
                end
         | 
| 567 | 
            +
             | 
| 568 | 
            +
              end
         | 
| 569 | 
            +
            end
         |