rakelib/scm.rb
author Jan Vrany <jan.vrany@fit.cvut.cz>
Sat, 29 Oct 2016 23:54:12 +0000
changeset 66 8d2d5dfe94d0
parent 62 de0e8016c2d5
child 67 75b6eb7b781c
permissions -rw-r--r--
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks ...rather than issuing hg commands by hand. `hglib.rb` provides higher-level API for repositories and thus would allow more complex logic (such as using mirrors to fetch base or smarter handling of bookmarks) being written in a more concise way.
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
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
     9
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
    10
  # 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
    11
  #
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
    12
  #     include RakeFileUtils
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
    13
  #
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
    14
  # 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
    15
  # 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
    16
  module_function
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
    17
  def sh(cmd, cwd: Dir.pwd, &block)
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
    18
    return RakeFileUtils::sh(cmd, cwd: cwd, &block)
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
    19
  end
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
  class CheckoutException < Exception
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
  end # class CheckoutException
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
  def self._check_type(type)
62
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
    26
    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
    27
      raise CheckoutException.new("Unknown version control system type (#{type})")
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
    end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
  end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
  def self.update(type, repository, directory, *params)
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
    self._check_type(type)
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
    if params.size() > 0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
      p = params.last
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
    else
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
      p = {}
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
    end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
    root = p[:root] || BUILD_DIR
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
    wc = root / directory
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
    if (! File.exist? wc)
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
      self.checkout(type, repository, directory, *params)
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
      return
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
    end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
    case type
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
      when :svn    then _update_svn(wc)
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
      when :cvs    then _update_cvs(wc)
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
      when :git    then _update_git(wc, repository, directory, *params)
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
      when :hg     then _update_hg(wc, repository, directory, *params)
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
    end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
  end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
  def self._update_hg(wc, repository = nil, directory = nil, *params)
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
    url = ''
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
    if repository != nil and directory != nil then
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
      if params.size() > 0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
        p = params.last
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
      else
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
        p = {}
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
      end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
      separator = p[:separator] || '.'
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
      url = "#{repository}/#{directory.gsub('/', separator)}"
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
    end
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
    64
    repo = HG::Repository.new(wc)
8d2d5dfe94d0 Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
    65
    begin
8d2d5dfe94d0 Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
    66
      repo.pull(url)
8d2d5dfe94d0 Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
    67
      repo.update()
8d2d5dfe94d0 Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
    68
    rescue Exception => ex 
8d2d5dfe94d0 Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
    69
      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
    70
    end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
  end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
62
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
    74
  def self._update_svn(wc)    
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
    75
    if not sh %W{svn --non-interactive --trust-server-cert update}, cwd: wc
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
    76
      raise CheckoutException.new("SVN: Cannot update #{wc}")
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
    end
62
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
    78
  end
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
    79
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
    80
  def self._update_cvs(wc)
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
    81
    if File.directory? wc
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
    82
      if not sh %W{cvs -z 9 update -A -d}, cwd: wc
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
    83
        raise CheckoutException.new("CVS: Cannot update #{wc}")
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
      end
62
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
    85
    else
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
    86
      if not sh %W{cvs -z 9 update -A #{File.basename(wc)}}, cwd: File.dirname(wc)
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
    87
        raise CheckoutException.new("CVS: Cannot update #{wc}")
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
      end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
    end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
  end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
62
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
    92
  def self.checkout(type, repository, directory, *params)    
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
    self._check_type(type)
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
    if params.size() > 0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
      p = params.last
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
    else
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
      p = {}
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
    end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
    root = p[:root] || BUILD_DIR
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
    branch = p[:branch]
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101
    if branch == nil
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   102
      if type == :svn
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
        branch = 'trunk'
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
      elsif type == :hg
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
        branch = 'default'
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
      end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   107
    end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
    wc = root / directory
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
    if (File.exist? wc)
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   111
      self.update(type, repository, directory, *params)
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
      return
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   113
    end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   115
    if (not File.exists? File.dirname(wc))
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   116
      begin
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   117
        FileUtils.mkdir_p(File.dirname(wc))
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   118
      rescue => ex
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   119
        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
   120
      end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   121
    end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   122
    case type
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   123
      when :svn    then _checkout_svn(repository, directory, branch, root, *params)
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   124
      when :cvs    then _checkout_cvs(repository, directory, branch, root, *params)
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   125
      when :git    then _checkout_git(repository, directory, branch, root, *params)
62
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   126
      when :hg     then _checkout_hg(repository, directory, branch, root, *params)      
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   127
    end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   128
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   129
  end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   130
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   131
  def self._checkout_svn(repository, directory, branch, root, *params)
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   132
    url = "#{repository}/#{directory}/#{branch}"
62
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   133
    if not sh %W{svn --non-interactive --trust-server-cert co #{url} #{directory}}, cwd: root
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   134
      raise CheckoutException.new("SVN: Cannot checkout from #{url}")
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   135
    end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   136
  end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   137
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   138
  def self._checkout_hg(repository, directory, branch, root, *params)
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   139
    if params.size() > 0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   140
      p = params.last
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   141
    else
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   142
      p = {}
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   143
    end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   144
    separator = p[:separator] || '.'
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   145
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
   146
    url = "#{repository}/#{directory.gsub('/', separator)}"
8d2d5dfe94d0 Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   147
    begin
8d2d5dfe94d0 Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   148
      repo = HG::Repository::clone(url, root / directory, noupdate: true)
8d2d5dfe94d0 Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   149
      repo.update(branch)
8d2d5dfe94d0 Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   150
    #rescue Exception => e
8d2d5dfe94d0 Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   151
    #  raise CheckoutException.new("HG: Cannot clone from #{url}: #{e.message}")
8d2d5dfe94d0 Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   152
    end
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   153
  end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   154
62
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   155
  def self._checkout_cvs(repository, directory, branch, root, *params)    
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   156
    if not sh %W{cvs -z 9 -d #{repository} co #{directory}}, cwd: root
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   157
      raise CheckoutException.new("CVS: Cannot checkout #{directory}from #{repository}")
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   158
    end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   159
  end
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
   160
end # module Rake::Stx::SCM
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   161
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   162
def checkout(repo_name, directory, *params)
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   163
  # 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
   164
  repo = Rake::Stx::Configuration::Repository::find(repo_name)
9099e2455d9c Added support for multiple different repository sets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   165
  if not repo then
9099e2455d9c Added support for multiple different repository sets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   166
      error("checkout(): No repository found (#{repo_name})")
62
de0e8016c2d5 Cleanup: Cleaned up command executing code in `rakelib\scm.rb`.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   167
  end  
59
9099e2455d9c Added support for multiple different repository sets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   168
  if params.last.is_a? Hash 
9099e2455d9c Added support for multiple different repository sets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   169
    params.last[:separator] = repo.separator
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   170
  else
59
9099e2455d9c Added support for multiple different repository sets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   171
    params << {:separator => repo.separator}
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
   172
  end    
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
   173
  Rake::Stx::SCM.checkout(repo.type, repo.url, directory, *params)  
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   174
end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   175
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   176
def update(repo_name, directory, *params)
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   177
  # 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
   178
  repo = Rake::Stx::Configuration::Repository::find(repo_name)
9099e2455d9c Added support for multiple different repository sets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   179
  if not repo then  
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   180
    error("update(): No repository found (#{repo_name})")
59
9099e2455d9c Added support for multiple different repository sets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   181
  end  
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
   182
  Rake::Stx::SCM.update(repo.type, repo.url, directory, *params)
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   183
end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   184
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   185
def cvs(repository, directory, *params)
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
   186
  Rake::Stx::SCM.checkout(:cvs, repository, directory, *params)
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   187
end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   188
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   189
def svn(repository, directory, *params)
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
   190
  Rake::Stx::SCM.checkout(:svn, repository, directory, *params)
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   191
end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   192
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   193
def hg(repository, directory, *params)
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
   194
  Rake::Stx::SCM.checkout(:hg, repository, directory, *params)
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   195
end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   196
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   197
def git(repository, directory, *params)
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
   198
  Rake::Stx::SCM.checkout(:git, repository, directory, *params)
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   199
end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   200