rakelib/workflow.rake
author Jan Vrany <jan.vrany@fit.cvut.cz>
Sun, 04 Dec 2016 22:21:22 +0000
changeset 88 112075e99cef
parent 86 f2a7a4378c22
child 105 983a637074e6
permissions -rw-r--r--
Support for 'upstream' repositories refactored. Each repository (factory) may define a 'staging' and an 'uptream' repository. A 'canonical' repository is mandatory. When checking out and/or updating, first changes from 'staging' are pulled, then from 'upstream' and at last from 'canonical repository'. Mercurial paths are defined. Repository sets updated accordingly.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
68
61d8bee7c4d4 Added new tasks - `workflow:push-upstream` and `workflow:push-staging`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
# This file contains various tasks usefull for Smalltalk/X jv-branch 
61d8bee7c4d4 Added new tasks - `workflow:push-upstream` and `workflow:push-staging`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
# development. Currently it only supports working with Mercurial repositories,
61d8bee7c4d4 Added new tasks - `workflow:push-upstream` and `workflow:push-staging`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
# Honestly, there's not much one can do with CVS, we're using it only for
61d8bee7c4d4 Added new tasks - `workflow:push-upstream` and `workflow:push-staging`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
# packages that have not been converted to Mercurial. 
61d8bee7c4d4 Added new tasks - `workflow:push-upstream` and `workflow:push-staging`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
61d8bee7c4d4 Added new tasks - `workflow:push-upstream` and `workflow:push-staging`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
namespace :'workflow' do
61d8bee7c4d4 Added new tasks - `workflow:push-upstream` and `workflow:push-staging`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
  # A helper function to :push-upstream and push-staging tasks
79
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
     8
  def hg_repositories()     
68
61d8bee7c4d4 Added new tasks - `workflow:push-upstream` and `workflow:push-staging`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
    project.packages_and_application.each do | pkg |
61d8bee7c4d4 Added new tasks - `workflow:push-upstream` and `workflow:push-staging`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
      if not pkg.nested_package? then
61d8bee7c4d4 Added new tasks - `workflow:push-upstream` and `workflow:push-staging`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
        repo = Rake::Stx::Configuration::Repository::find(pkg.repository)
61d8bee7c4d4 Added new tasks - `workflow:push-upstream` and `workflow:push-staging`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
        if repo.type == :'hg' then
79
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    13
          hg = HG::Repository.new(BUILD_DIR / pkg.directory)          
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    14
          yield hg          
68
61d8bee7c4d4 Added new tasks - `workflow:push-upstream` and `workflow:push-staging`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
        end
61d8bee7c4d4 Added new tasks - `workflow:push-upstream` and `workflow:push-staging`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
      end
79
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    17
    end    
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    18
  end
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    19
  
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    20
  def push(remote, user, pass, review_only, push_bookmark)  
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    21
    hg_repositories do | hg |
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    22
      opts = {
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    23
        :user => user,
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    24
        :pass => pass,
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    25
      }                  
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    26
      if review_only then
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    27
        opts[:rev] = '.'
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    28
        remote_url = hg.paths[remote] || remote
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    29
        bookmark = hg.bookmark()
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    30
        puts ""
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    31
        puts "== changes going to #{remote_url} =="
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    32
        puts ""
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    33
        hg.outgoing(remote, **opts)
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    34
        puts ""
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    35
        if push_bookmark and bookmark then
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    36
          puts "Will update bookmark '#{bookmark}"
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    37
        end
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    38
        puts "===================================="
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    39
        puts ""
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    40
      else
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    41
        if push_bookmark && bookmark then
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    42
          opts[:bookmarks] = ['.']
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    43
        else
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    44
          opts[:rev] = '.'
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    45
        end        
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    46
        hg.push(remote, **opts)
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    47
      end
68
61d8bee7c4d4 Added new tasks - `workflow:push-upstream` and `workflow:push-staging`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
    end
61d8bee7c4d4 Added new tasks - `workflow:push-upstream` and `workflow:push-staging`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
  end
61d8bee7c4d4 Added new tasks - `workflow:push-upstream` and `workflow:push-staging`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
79
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    51
  desc "Display changes to be pushed to upstream repositores (use it to review what workflow:push-upstream would do)"
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    52
  task :'out-upstream', :user, :pass do | t, args |
88
112075e99cef Support for 'upstream' repositories refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
    53
    push('upstream', args[:user], args[:pass], true, false)
79
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    54
  end
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    55
  task :'out-upstream' => :'setup'
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    56
68
61d8bee7c4d4 Added new tasks - `workflow:push-upstream` and `workflow:push-staging`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
  desc "Push currently checked out revisions to upstream repositories (to be called after all tests pass on all configurations)"
61d8bee7c4d4 Added new tasks - `workflow:push-upstream` and `workflow:push-staging`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
  task :'push-upstream', :user, :pass do | t, args |
88
112075e99cef Support for 'upstream' repositories refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 86
diff changeset
    59
    push('upstream', args[:user], args[:pass], false, false)
68
61d8bee7c4d4 Added new tasks - `workflow:push-upstream` and `workflow:push-staging`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
  end
61d8bee7c4d4 Added new tasks - `workflow:push-upstream` and `workflow:push-staging`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
  task :'push-upstream' => :'setup'
61d8bee7c4d4 Added new tasks - `workflow:push-upstream` and `workflow:push-staging`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
79
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    63
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    64
  desc "Display changes to be pushed to staging repositores (use it to review what workflow:push-staging would do)"
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    65
  task :'out-staging', :user, :pass do | t, args |
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    66
    push('staging', args[:user], args[:pass], true, true)
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    67
  end
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    68
  task :'out-staging' => :'setup'
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    69
68
61d8bee7c4d4 Added new tasks - `workflow:push-upstream` and `workflow:push-staging`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
  desc "Push currently checked out revisions to staging repositories (to be by developer to test her changes)"
61d8bee7c4d4 Added new tasks - `workflow:push-upstream` and `workflow:push-staging`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
  task :'push-staging', :user, :pass do | t, args |
79
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    72
    push('staging', args[:user], args[:pass], false, true)
68
61d8bee7c4d4 Added new tasks - `workflow:push-upstream` and `workflow:push-staging`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
  end
61d8bee7c4d4 Added new tasks - `workflow:push-upstream` and `workflow:push-staging`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
  task :'push-staging' => :'setup'
79
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    75
86
f2a7a4378c22 Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 79
diff changeset
    76
  desc "(Auto)merge changes (from eXept)"
f2a7a4378c22 Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 79
diff changeset
    77
  task :'merge' => :'setup' do
f2a7a4378c22 Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 79
diff changeset
    78
    if not which("hg-automerge.rb") then
f2a7a4378c22 Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 79
diff changeset
    79
      info "Cannot find 'hg-automerge.rb' in PATH"
f2a7a4378c22 Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 79
diff changeset
    80
      info "You may find it at https://bitbucket.org/janvrany/jv-scripts"
f2a7a4378c22 Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 79
diff changeset
    81
      error "Cannot find 'hg-automerge.rb' in PATH"
f2a7a4378c22 Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 79
diff changeset
    82
    end    
f2a7a4378c22 Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 79
diff changeset
    83
    hg_repositories_failed_to_merge = []
f2a7a4378c22 Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 79
diff changeset
    84
    hg_repositories do | hg |
f2a7a4378c22 Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 79
diff changeset
    85
      if File.exist? (hg.path / '.hgautomerge') then
f2a7a4378c22 Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 79
diff changeset
    86
        info "Merging #{hg.path}"
f2a7a4378c22 Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 79
diff changeset
    87
        sh "hg-automerge.rb --cwd #{hg.path}"
f2a7a4378c22 Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 79
diff changeset
    88
      else 
f2a7a4378c22 Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 79
diff changeset
    89
        info "Not merging #{hg.path} - no merge config found."
f2a7a4378c22 Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 79
diff changeset
    90
        info "To configure run: 'hg-automerge.rb --cwd #{hg.path} --config'"
f2a7a4378c22 Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 79
diff changeset
    91
      end
f2a7a4378c22 Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 79
diff changeset
    92
    end
f2a7a4378c22 Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 79
diff changeset
    93
  end
79
1058962ee3ef Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    94
68
61d8bee7c4d4 Added new tasks - `workflow:push-upstream` and `workflow:push-staging`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
end