rakelib/scm.rb
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 24 Jul 2019 10:02:21 +0000
changeset 268 da6c28844912
parent 263 dd183640f63e
child 269 e6ccd5be9bcb
permissions -rw-r--r--
Rakefiles: renamed `staging` repository to `origin` repository This is a better name because it is not necesarily staging in terms of test pipeline. It's merely the repository from which the local copy has been cloned. Hence I think origin is a better name.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
66
8d2d5dfe94d0 Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
     1
require 'rakelib/hglib'
8d2d5dfe94d0 Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
     2
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
module Rake
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
module Rake::StX
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
85
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
     9
# Cross-platform way of finding an executable in the $PATH.
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    10
#
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    11
#   which('ruby') #=> /usr/bin/ruby
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    12
def which(cmd)
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    13
  exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    14
  ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
    15
    exts.each {|ext|
85
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    16
      exe = File.join(path, "#{cmd}#{ext}")
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    17
      return exe if File.executable?(exe) && !File.directory?(exe)
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    18
    }
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    19
  end
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
    20
  nil
85
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    21
end
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    22
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    23
cvs_rsh_set = false
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    24
60
57c963e85a00 Cleanup: Renamed `vcs.rb` & `Rake::StX::VCS` to `scm.rb` and `Rake::StX::SCM`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 59
diff changeset
    25
module Rake::Stx::SCM
62
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
    26
  # Not quite sure why following code
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
    27
  #
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
    28
  #     include RakeFileUtils
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
    29
  #
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
    30
  # does not make extra methods (like `sh`) defined in `extensions.rb`
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
    31
  # visible here. To workaround, define them here. Ugly...
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
    32
  module_function
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
    33
62
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
    34
  def sh(cmd, cwd: Dir.pwd, &block)
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
    35
    begin
81
2a1efb99c83d Oops, fixed bug introduced in de0e8016c2d5
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 75
diff changeset
    36
      return RakeFileUtils::sh(cmd, cwd: cwd, &block)
2a1efb99c83d Oops, fixed bug introduced in de0e8016c2d5
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 75
diff changeset
    37
    rescue
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
    38
      return false
81
2a1efb99c83d Oops, fixed bug introduced in de0e8016c2d5
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 75
diff changeset
    39
    end
62
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
    40
  end
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
85
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    42
  # Make sure CVS_RSH environment variable is properly set. Prefer MSYS2 ssh.exe
268
da6c28844912 Rakefiles: renamed `staging` repository to `origin` repository
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 263
diff changeset
    43
  # over plink.exe. For details, see `hglib.rb`, method `sshconf()`
85
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    44
  module_function
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
    45
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
    46
  def ensure_cvs_rsh_set
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
    47
    return if @cvs_rsh_set
85
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    48
    ssh = nil
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
    49
    ssh_configured = ENV['CVS_RSH']
85
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    50
    ssh_in_path = which('ssh') ? true : false
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    51
    plink_in_path = which('plink') ? true : false
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
    52
    if Gem.win_platform?
268
da6c28844912 Rakefiles: renamed `staging` repository to `origin` repository
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 263
diff changeset
    53
      # If CVS_RSH is not set or is set to plink.exe, try to change to
da6c28844912 Rakefiles: renamed `staging` repository to `origin` repository
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 263
diff changeset
    54
      # MSYS2 ssh.exe as it gives better performance on (fast) LANs.
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
    55
      if /^.*[pP]link(\.exe)?"?\s*(-ssh)?\s*(-2)?$/ =~ ssh_configured
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
    56
        ssh_in_path ? (ssh = 'ssh') : (ssh = %q{"c:\msys64\usr\bin\ssh.exe"} if File.exist? %q{c:\msys64\usr\bin\ssh.exe})
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
    57
85
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    58
        # Sigh, we should not tamper with SSH configuration wildly. User may have
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    59
        # her ssh and mercurial properly configured to use `plink.exe` and `pageant`.
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    60
        # If we just start using `ssh.exe` clone/pull might not work beause
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    61
        # `ssh.exe` cannot talk to `pageant`. So, if we don't find OpenSSH's 
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    62
        # style of agent, don't use `ssh.exe` event if available.
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
    63
        if ssh
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
    64
          if ENV['SSH_AUTH_SOCK']
85
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    65
            # Good, OpenSSH agent running but still, be nice and  tell the 
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    66
            # user SSH configuration has been tampered wirh. 
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    67
            info("Setting CVS_RSH=\"#{ssh}\" for faster transfers")
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
    68
          else
85
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    69
            # No agent, no fun. Be nice and give user a hit
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    70
            warn("Not using CVS_RSH=\"#{ssh}\" option because SSH agent is not running")
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    71
            warn("For faster CVS checkout over LAN, consider using ssh-agent or ssh-pageant (if you want to use PuTTY's pageant)")
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    72
            ssh = nil
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    73
          end
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    74
        end
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    75
      end
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
    76
    else
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
    77
      ssh = 'ssh' unless ssh_configured
85
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    78
    end
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
    79
    ENV['CVS_RSH'] = ssh if ssh
85
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    80
    cvs_rsh_set = true
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    81
  end
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    82
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    83
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    84
  public
6d918f722075 Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 81
diff changeset
    85
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
  class CheckoutException < Exception
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
  end # class CheckoutException
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
  def self._check_type(type)
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
    91
    raise CheckoutException.new("Unknown version control system type (#{type})") if type != :cvs and type != :svn and type != :git and type != :hg
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
  end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
71
68c8cccbdec5 Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
    94
  def self.update(repository, directory, **kwargs)
67
75b6eb7b781c Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 66
diff changeset
    95
    type = repository.type
75b6eb7b781c Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 66
diff changeset
    96
    url = repository.canonical
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
    97
    self._check_type(type)
71
68c8cccbdec5 Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
    98
    root = kwargs[:root] || BUILD_DIR
68c8cccbdec5 Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
    99
    branch = kwargs[:branch]
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   100
    if branch.nil?
71
68c8cccbdec5 Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   101
      if type == :svn
68c8cccbdec5 Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   102
        branch = 'trunk'
68c8cccbdec5 Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   103
      elsif type == :hg
68c8cccbdec5 Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   104
        branch = 'default'
68c8cccbdec5 Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   105
      end
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
    end
71
68c8cccbdec5 Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   107
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
    wc = root / directory
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   109
    unless File.exist? wc
71
68c8cccbdec5 Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   110
      self.checkout(repository, directory, **kwargs)
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   111
      return
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
    end
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   113
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
    case type
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   115
      when :svn
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   116
        _update_svn(repository, directory, branch, root, **kwargs)
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   117
      when :cvs
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   118
        _update_cvs(repository, directory, branch, root, **kwargs)
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   119
      when :git
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   120
        _update_git(repository, directory, branch, root, **kwargs)
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   121
      when :hg
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   122
        _update_hg(repository, directory, branch, root, **kwargs)
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   123
      else
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   124
        error("Type #{type} not found")
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   125
    end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   126
  end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   127
71
68c8cccbdec5 Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   128
  def self._update_hg(repository, directory, branch, root, **kwargs)
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   129
71
68c8cccbdec5 Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   130
    wc = root / directory
68c8cccbdec5 Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   131
    separator = kwargs[:separator] || '.'
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   132
    revision = kwargs[:revision]
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   133
    url = "#{repository.canonical}/#{directory.gsub('/', separator)}" unless directory.nil?
67
75b6eb7b781c Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 66
diff changeset
   134
    hg = HG::Repository.new(wc)
66
8d2d5dfe94d0 Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   135
    begin
67
75b6eb7b781c Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 66
diff changeset
   136
      paths = hg.paths
268
da6c28844912 Rakefiles: renamed `staging` repository to `origin` repository
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 263
diff changeset
   137
      if repository.origin
da6c28844912 Rakefiles: renamed `staging` repository to `origin` repository
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 263
diff changeset
   138
        unless paths.has_key? 'origin'
da6c28844912 Rakefiles: renamed `staging` repository to `origin` repository
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 263
diff changeset
   139
          paths['origin'] = "#{repository.origin}/#{directory.gsub('/', separator)}"
67
75b6eb7b781c Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 66
diff changeset
   140
          hg.paths = paths
75b6eb7b781c Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 66
diff changeset
   141
        end
268
da6c28844912 Rakefiles: renamed `staging` repository to `origin` repository
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 263
diff changeset
   142
        hg.pull('origin')
67
75b6eb7b781c Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 66
diff changeset
   143
      end
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   144
      if repository.upstream
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   145
        unless paths.has_key? 'upstream'
88
112075e99cef Support for 'upstream' repositories refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
   146
          paths['upstream'] = "#{repository.upstream}/#{directory.gsub('/', separator)}"
112075e99cef Support for 'upstream' repositories refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
   147
          hg.paths = paths
112075e99cef Support for 'upstream' repositories refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
   148
        end
112075e99cef Support for 'upstream' repositories refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
   149
        hg.pull('upstream')
112075e99cef Support for 'upstream' repositories refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
   150
      end
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   151
      unless paths.has_key? 'canonical'
67
75b6eb7b781c Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 66
diff changeset
   152
        paths['canonical'] = "#{repository.canonical}/#{directory.gsub('/', separator)}"
75b6eb7b781c Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 66
diff changeset
   153
        hg.paths = paths
75b6eb7b781c Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 66
diff changeset
   154
      end
263
dd183640f63e Retry `hg pull` from canonical (BitBucket) repos if it fails
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   155
dd183640f63e Retry `hg pull` from canonical (BitBucket) repos if it fails
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   156
      begin
dd183640f63e Retry `hg pull` from canonical (BitBucket) repos if it fails
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   157
        hg.pull('canonical') if repository.canonical
dd183640f63e Retry `hg pull` from canonical (BitBucket) repos if it fails
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   158
      rescue Exception
dd183640f63e Retry `hg pull` from canonical (BitBucket) repos if it fails
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   159
        delay = 30 + rand * 100
dd183640f63e Retry `hg pull` from canonical (BitBucket) repos if it fails
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   160
        info("Will retry after #{delay}...")
dd183640f63e Retry `hg pull` from canonical (BitBucket) repos if it fails
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   161
        sleep(delay)
dd183640f63e Retry `hg pull` from canonical (BitBucket) repos if it fails
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   162
        begin
dd183640f63e Retry `hg pull` from canonical (BitBucket) repos if it fails
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   163
          hg.pull('canonical')
dd183640f63e Retry `hg pull` from canonical (BitBucket) repos if it fails
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   164
        rescue Exception
dd183640f63e Retry `hg pull` from canonical (BitBucket) repos if it fails
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   165
          delay = 30 + rand * 100
dd183640f63e Retry `hg pull` from canonical (BitBucket) repos if it fails
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   166
          info("Will retry after #{delay}...")
dd183640f63e Retry `hg pull` from canonical (BitBucket) repos if it fails
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   167
          sleep(delay)
dd183640f63e Retry `hg pull` from canonical (BitBucket) repos if it fails
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   168
          hg.pull('canonical')
dd183640f63e Retry `hg pull` from canonical (BitBucket) repos if it fails
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   169
        end
dd183640f63e Retry `hg pull` from canonical (BitBucket) repos if it fails
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   170
      end
dd183640f63e Retry `hg pull` from canonical (BitBucket) repos if it fails
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   171
72
3e832d54a4af Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 71
diff changeset
   172
      # If revision is not specified, then look for an active bookmark
3e832d54a4af Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 71
diff changeset
   173
      # and update to it. If no bookmark is active, then look for bookmark
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   174
      # `master`. If it exist, then update to `master`. If it
72
3e832d54a4af Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 71
diff changeset
   175
      # does not, then update to tip or throw an error.
3e832d54a4af Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 71
diff changeset
   176
      # The error is thrown if there's no bookmark `master` and
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   177
      # branch has multiple heads since it's not clear which
72
3e832d54a4af Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 71
diff changeset
   178
      # head rev to use.
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   179
      unless revision
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   180
        revision = hg.bookmark
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   181
        unless revision
72
3e832d54a4af Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 71
diff changeset
   182
          bookmarks = hg.bookmarks(branch)
249
20b718d60bba Rakefiles: automagically checkout revisions for given branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 220
diff changeset
   183
          if bookmarks.has_key? BUILD_BRANCH
263
dd183640f63e Retry `hg pull` from canonical (BitBucket) repos if it fails
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   184
            revision = BUILD_BRANCH
249
20b718d60bba Rakefiles: automagically checkout revisions for given branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 220
diff changeset
   185
          elsif bookmarks.has_key? 'master'
72
3e832d54a4af Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 71
diff changeset
   186
            revision = 'master'
3e832d54a4af Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 71
diff changeset
   187
          else
220
8faa459a7ee9 Rakefiles: do not consider secret changesets as heads when updating
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 137
diff changeset
   188
            if hg.heads(branch, include_secret: false).size > 1
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   189
              raise CheckoutException.new("HG: Cannot checkout #{directory}: directory. The ->#{branch}<- branch has multiple heads but no bookmark named 'master'! (All other branches are ignored)")
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   190
            end
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   191
          end
72
3e832d54a4af Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 71
diff changeset
   192
        end
3e832d54a4af Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 71
diff changeset
   193
      end
3e832d54a4af Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 71
diff changeset
   194
      hg.update(revision || branch)
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   195
    rescue Exception => ex
66
8d2d5dfe94d0 Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   196
      raise CheckoutException.new("HG: Cannot update #{wc}: #{ex.message}")
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   197
    end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   198
  end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   199
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   200
71
68c8cccbdec5 Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   201
  def self._update_svn(repository, directory, branch, root, **kwargs)
68c8cccbdec5 Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   202
    wc = root / directory
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   203
    raise CheckoutException.new("SVN: Cannot update #{wc}") unless (sh %W{svn --non-interactive --trust-server-cert update}, cwd: wc)
62
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   204
  end
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   205
71
68c8cccbdec5 Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   206
  def self._update_cvs(repository, directory, branch, root, **kwargs)
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   207
    ensure_cvs_rsh_set
71
68c8cccbdec5 Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   208
    wc = root / directory
62
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   209
    if File.directory? wc
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   210
      raise CheckoutException.new("CVS: Cannot update #{wc}") unless (sh %W{cvs -z 9 update -A -d}, cwd: wc)
62
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   211
    else
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   212
      raise CheckoutException.new("CVS: Cannot update #{wc}") unless (sh %W{cvs -z 9 update -A #{File.basename(wc)}}, cwd: File.dirname(wc))
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   213
    end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   214
  end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   215
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   216
  def self.checkout(repository, directory, **kwargs)
67
75b6eb7b781c Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 66
diff changeset
   217
    type = repository.type
75b6eb7b781c Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 66
diff changeset
   218
    url = repository.canonical
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   219
    self._check_type(type)
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   220
71
68c8cccbdec5 Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   221
    root = kwargs[:root] || BUILD_DIR
68c8cccbdec5 Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   222
    branch = kwargs[:branch]
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   223
    if branch.nil?
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   224
      if type == :svn
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   225
        branch = 'trunk'
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   226
      elsif type == :hg
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   227
        branch = 'default'
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   228
      end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   229
    end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   230
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   231
    wc = root / directory
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   232
    if File.exist? wc
71
68c8cccbdec5 Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   233
      self.update(repository, directory, **kwargs)
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   234
      return
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   235
    end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   236
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   237
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   238
    unless File.exists? File.dirname(wc)
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   239
      begin
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   240
        FileUtils.mkdir_p(File.dirname(wc))
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   241
      rescue => ex
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   242
        raise CheckoutException.new("Cannot create directory for working copy (#{ex})")
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   243
      end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   244
    end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   245
    case type
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   246
      when :svn
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   247
        _checkout_svn(repository, directory, branch, root, **kwargs)
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   248
      when :cvs
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   249
        _checkout_cvs(repository, directory, branch, root, **kwargs)
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   250
      when :git
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   251
        _checkout_git(repository, directory, branch, root, **kwargs)
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   252
      when :hg
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   253
        _checkout_hg(repository, directory, branch, root, **kwargs)
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   254
      else
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   255
        error("Type #{type} not found")
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   256
    end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   257
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   258
  end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   259
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   260
  def self._checkout_svn(repository, directory, branch, root, **kwargs)
67
75b6eb7b781c Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 66
diff changeset
   261
    url = "#{repository.canonical}/#{directory}/#{branch}"
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   262
    raise CheckoutException.new("SVN: Cannot checkout from #{url}") unless (sh %W{svn --non-interactive --trust-server-cert co #{url} #{directory}}, cwd: root)
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   263
  end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   264
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   265
  def self._checkout_hg(repository, directory, branch, root, **kwargs)
71
68c8cccbdec5 Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   266
    separator = kwargs[:separator] || '.'
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   267
    revision = kwargs[:revision]
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   268
102
fc572bd895f2 Cleanup: treat stx:stc & stx:librun as normal packages
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 88
diff changeset
   269
    paths = {}
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   270
    if repository.canonical
102
fc572bd895f2 Cleanup: treat stx:stc & stx:librun as normal packages
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 88
diff changeset
   271
      paths['canonical'] = "#{repository.canonical}/#{directory.gsub('/', separator)}"
fc572bd895f2 Cleanup: treat stx:stc & stx:librun as normal packages
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 88
diff changeset
   272
    else
fc572bd895f2 Cleanup: treat stx:stc & stx:librun as normal packages
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 88
diff changeset
   273
      raise Exception.new("Repository named #{repository.name} does not define mandatory canonical repository URL")
fc572bd895f2 Cleanup: treat stx:stc & stx:librun as normal packages
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 88
diff changeset
   274
    end
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   275
    if repository.upstream
88
112075e99cef Support for 'upstream' repositories refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
   276
      paths['upstream'] = "#{repository.upstream}/#{directory.gsub('/', separator)}"
112075e99cef Support for 'upstream' repositories refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
   277
    end
268
da6c28844912 Rakefiles: renamed `staging` repository to `origin` repository
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 263
diff changeset
   278
    if repository.origin
da6c28844912 Rakefiles: renamed `staging` repository to `origin` repository
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 263
diff changeset
   279
      paths['origin'] = "#{repository.origin}/#{directory.gsub('/', separator)}"
67
75b6eb7b781c Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 66
diff changeset
   280
    end
268
da6c28844912 Rakefiles: renamed `staging` repository to `origin` repository
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 263
diff changeset
   281
    paths['default'] = paths['origin'] || paths['upstream'] || paths['canonical']
88
112075e99cef Support for 'upstream' repositories refactored.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
   282
66
8d2d5dfe94d0 Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   283
    begin
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   284
      hg = HG::Repository.init(root / directory)
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   285
      # Configure path aliases.
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   286
      #
268
da6c28844912 Rakefiles: renamed `staging` repository to `origin` repository
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 263
diff changeset
   287
      # Set the repository as non-publishing, This way when cloning from 'origin'
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   288
      # repo changes in draft phase would remain drafs. This is  essential to
120
2c4e52c4c930 Do not use `hg clone ...` to create and pull changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 117
diff changeset
   289
      # employ evolve extension and being able to fix & evolve changes in clones
2c4e52c4c930 Do not use `hg clone ...` to create and pull changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 117
diff changeset
   290
      # (on a CI server, for instance) and being able to push back without need to
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   291
      # fiddle around phases.
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   292
      #
120
2c4e52c4c930 Do not use `hg clone ...` to create and pull changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 117
diff changeset
   293
      # The downside is that we cannot do an `uncompressed` pull. This is the price
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   294
      # we have to pay.
120
2c4e52c4c930 Do not use `hg clone ...` to create and pull changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 117
diff changeset
   295
      hg.config_set(
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   296
          phases: {'publish' => 'false'},
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   297
          paths: paths
120
2c4e52c4c930 Do not use `hg clone ...` to create and pull changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 117
diff changeset
   298
      )
2c4e52c4c930 Do not use `hg clone ...` to create and pull changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 117
diff changeset
   299
268
da6c28844912 Rakefiles: renamed `staging` repository to `origin` repository
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 263
diff changeset
   300
      hg.pull('origin') if repository.origin
120
2c4e52c4c930 Do not use `hg clone ...` to create and pull changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 117
diff changeset
   301
      hg.pull('upstream') if repository.upstream
263
dd183640f63e Retry `hg pull` from canonical (BitBucket) repos if it fails
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   302
dd183640f63e Retry `hg pull` from canonical (BitBucket) repos if it fails
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   303
      begin
dd183640f63e Retry `hg pull` from canonical (BitBucket) repos if it fails
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   304
        hg.pull('canonical') if repository.canonical
dd183640f63e Retry `hg pull` from canonical (BitBucket) repos if it fails
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   305
      rescue Exception
dd183640f63e Retry `hg pull` from canonical (BitBucket) repos if it fails
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   306
        delay = 30 + rand * 100
dd183640f63e Retry `hg pull` from canonical (BitBucket) repos if it fails
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   307
        info("Will retry after #{delay}...")
dd183640f63e Retry `hg pull` from canonical (BitBucket) repos if it fails
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   308
        sleep(delay)
dd183640f63e Retry `hg pull` from canonical (BitBucket) repos if it fails
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   309
        begin
dd183640f63e Retry `hg pull` from canonical (BitBucket) repos if it fails
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   310
          hg.pull('canonical')
dd183640f63e Retry `hg pull` from canonical (BitBucket) repos if it fails
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   311
        rescue Exception
dd183640f63e Retry `hg pull` from canonical (BitBucket) repos if it fails
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   312
          delay = 30 + rand * 100
dd183640f63e Retry `hg pull` from canonical (BitBucket) repos if it fails
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   313
          info("Will retry after #{delay}...")
dd183640f63e Retry `hg pull` from canonical (BitBucket) repos if it fails
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   314
          sleep(delay)
dd183640f63e Retry `hg pull` from canonical (BitBucket) repos if it fails
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   315
          hg.pull('canonical')
dd183640f63e Retry `hg pull` from canonical (BitBucket) repos if it fails
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   316
        end
dd183640f63e Retry `hg pull` from canonical (BitBucket) repos if it fails
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   317
      end
dd183640f63e Retry `hg pull` from canonical (BitBucket) repos if it fails
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   318
72
3e832d54a4af Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 71
diff changeset
   319
      # If revision is not specified, then look for bookmark
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   320
      # `master`. If it exist, then check out `master`. If it
72
3e832d54a4af Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 71
diff changeset
   321
      # does not, then checkout tip or throw an error.
3e832d54a4af Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 71
diff changeset
   322
      # The error is thrown if there's no bookmark `master` and
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   323
      # branch has multiple heads since it's not clear which
72
3e832d54a4af Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 71
diff changeset
   324
      # head rev to use.
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   325
      unless revision
72
3e832d54a4af Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 71
diff changeset
   326
        bookmarks = hg.bookmarks(branch)
249
20b718d60bba Rakefiles: automagically checkout revisions for given branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 220
diff changeset
   327
        if bookmarks.has_key? BUILD_BRANCH
263
dd183640f63e Retry `hg pull` from canonical (BitBucket) repos if it fails
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
   328
            revision = BUILD_BRANCH
249
20b718d60bba Rakefiles: automagically checkout revisions for given branch
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 220
diff changeset
   329
        elsif bookmarks.has_key? 'master'
72
3e832d54a4af Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 71
diff changeset
   330
          revision = 'master'
3e832d54a4af Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 71
diff changeset
   331
        else
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   332
          if hg.heads(branch).size > 1
72
3e832d54a4af Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 71
diff changeset
   333
            raise CheckoutException.new("HG: Cannot checkout #{directory}: branch #{branch} has multiple heads but no bookmark named 'master'!")
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   334
          end
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   335
        end
72
3e832d54a4af Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 71
diff changeset
   336
      end
3e832d54a4af Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 71
diff changeset
   337
3e832d54a4af Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 71
diff changeset
   338
      hg.update(revision || branch)
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   339
      #rescue Exception => e
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   340
      #  raise CheckoutException.new("HG: Cannot clone from #{url}: #{e.message}")
66
8d2d5dfe94d0 Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   341
    end
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   342
  end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   343
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   344
  def self._checkout_cvs(repository, directory, branch, root, **kwargs)
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   345
    revision = kwargs[:revision] || nil
117
f163911eb7bc Win32: Workarounds for bugs in eXept's Win32 makefiles as of 2017-01-13
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 102
diff changeset
   346
    revision_arg = ''
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   347
    if revision
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   348
      raise Exception.new('CVS only support date spec as revision: option (YYYY-MM-DD)') unless revision.match(/^\d{4}-([0]\d|[1][012])-([012]\d|[3][01])$/)
117
f163911eb7bc Win32: Workarounds for bugs in eXept's Win32 makefiles as of 2017-01-13
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 102
diff changeset
   349
      revision_arg = " -D #{revision}"
f163911eb7bc Win32: Workarounds for bugs in eXept's Win32 makefiles as of 2017-01-13
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 102
diff changeset
   350
    end
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   351
    ensure_cvs_rsh_set
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   352
    unless sh "cvs -z 9 -d #{repository.canonical} co #{revision_arg} #{directory}", cwd: root
67
75b6eb7b781c Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 66
diff changeset
   353
      raise CheckoutException.new("CVS: Cannot checkout #{directory}from #{repository.url}")
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   354
    end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   355
  end
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   356
60
57c963e85a00 Cleanup: Renamed `vcs.rb` & `Rake::StX::VCS` to `scm.rb` and `Rake::StX::SCM`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 59
diff changeset
   357
end # module Rake::Stx::SCM
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   358
71
68c8cccbdec5 Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   359
def checkout(repo_name, directory, **kwargs)
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   360
  # repository should be symbolic name
59
9099e2455d9c Added support for multiple different repository sets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   361
  repo = Rake::Stx::Configuration::Repository::find(repo_name)
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   362
  error("checkout: No repository found (#{repo_name})") unless repo
71
68c8cccbdec5 Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   363
  kwargs[:separator] = repo.separator
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   364
  Rake::Stx::SCM.checkout(repo, directory, **kwargs)
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   365
end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   366
71
68c8cccbdec5 Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   367
def update(repo_name, directory, **kwargs)
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   368
  # repository should be symbolic name
59
9099e2455d9c Added support for multiple different repository sets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   369
  repo = Rake::Stx::Configuration::Repository::find(repo_name)
137
e665031cade7 Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents: 120
diff changeset
   370
  error("update: No repository found (#{repo_name})") unless repo
71
68c8cccbdec5 Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   371
  kwargs[:separator] = repo.separator
68c8cccbdec5 Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   372
  Rake::Stx::SCM.update(repo, directory, **kwargs)
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   373
end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   374
71
68c8cccbdec5 Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   375
def cvs(url, directory, **kwargs)
67
75b6eb7b781c Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 66
diff changeset
   376
  repo = Rake::Stx::Configuration::Repository.new(:type => :cvs, :url => url)
71
68c8cccbdec5 Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   377
  Rake::Stx::SCM.checkout(repo, directory, **kwargs)
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   378
end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   379
71
68c8cccbdec5 Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   380
def svn(url, directory, **kwargs)
67
75b6eb7b781c Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 66
diff changeset
   381
  repo = Rake::Stx::Configuration::Repository.new(:type => :svn, :url => url)
71
68c8cccbdec5 Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   382
  Rake::Stx::SCM.checkout(repo, directory, **kwargs)
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   383
end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   384
71
68c8cccbdec5 Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   385
def hg(url, directory, **kwargs)
67
75b6eb7b781c Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 66
diff changeset
   386
  repo = Rake::Stx::Configuration::Repository.new(:type => :hg, :url => url)
71
68c8cccbdec5 Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   387
  Rake::Stx::SCM.checkout(repo, directory, **kwargs)
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   388
end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   389
71
68c8cccbdec5 Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   390
def git(url, directory, **kwargs)
67
75b6eb7b781c Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 66
diff changeset
   391
  repo = Rake::Stx::Configuration::Repository.new(:type => :git, :url => url)
71
68c8cccbdec5 Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 67
diff changeset
   392
  Rake::Stx::SCM.checkout(repo, directory, **kwargs)
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   393
end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   394