rakelib/workflow.rake
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 22 Nov 2016 21:19:13 +0000
changeset 79 1058962ee3ef
parent 78 2d09a485772f
child 86 f2a7a4378c22
permissions -rw-r--r--
Added new tasks: `workflow:out-staging` and `workflow:out-upstream` ...that can be used by developers to review changes before pushing them to coresponding repositories.

# This file contains various tasks usefull for Smalltalk/X jv-branch 
# development. Currently it only supports working with Mercurial repositories,
# Honestly, there's not much one can do with CVS, we're using it only for
# packages that have not been converted to Mercurial. 

namespace :'workflow' do
  # A helper function to :push-upstream and push-staging tasks
  def hg_repositories()     
    project.packages_and_application.each do | pkg |
      if not pkg.nested_package? then
        repo = Rake::Stx::Configuration::Repository::find(pkg.repository)
        if repo.type == :'hg' then
          hg = HG::Repository.new(BUILD_DIR / pkg.directory)          
          yield hg          
        end
      end
    end    
  end
  
  def push(remote, user, pass, review_only, push_bookmark)  
    hg_repositories do | hg |
      opts = {
        :user => user,
        :pass => pass,
      }                  
      if review_only then
        opts[:rev] = '.'
        remote_url = hg.paths[remote] || remote
        bookmark = hg.bookmark()
        puts ""
        puts "== changes going to #{remote_url} =="
        puts ""
        hg.outgoing(remote, **opts)
        puts ""
        if push_bookmark and bookmark then
          puts "Will update bookmark '#{bookmark}"
        end
        puts "===================================="
        puts ""
      else
        if push_bookmark && bookmark then
          opts[:bookmarks] = ['.']
        else
          opts[:rev] = '.'
        end        
        hg.push(remote, **opts)
      end
    end
  end

  desc "Display changes to be pushed to upstream repositores (use it to review what workflow:push-upstream would do)"
  task :'out-upstream', :user, :pass do | t, args |
    push('default', args[:user], args[:pass], true, false)
  end
  task :'out-upstream' => :'setup'

  desc "Push currently checked out revisions to upstream repositories (to be called after all tests pass on all configurations)"
  task :'push-upstream', :user, :pass do | t, args |
    push('default', args[:user], args[:pass], false, false)
  end
  task :'push-upstream' => :'setup'


  desc "Display changes to be pushed to staging repositores (use it to review what workflow:push-staging would do)"
  task :'out-staging', :user, :pass do | t, args |
    push('staging', args[:user], args[:pass], true, true)
  end
  task :'out-staging' => :'setup'

  desc "Push currently checked out revisions to staging repositories (to be by developer to test her changes)"
  task :'push-staging', :user, :pass do | t, args |
    push('staging', args[:user], args[:pass], false, true)
  end
  task :'push-staging' => :'setup'



end