author | Jan Vrany <jan.vrany@fit.cvut.cz> |
Fri, 21 Sep 2018 23:14:41 +0100 | |
changeset 255 | 6d6880749905 |
parent 234 | 05943c900d5e |
child 269 | e6ccd5be9bcb |
permissions | -rw-r--r-- |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
1 |
# This file is not a standalone script. It is a kind |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
2 |
# of lightweight Mercurial library used by other scripts. |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
3 |
|
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
4 |
require 'uri' |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
5 |
require 'open3' |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
6 |
require 'shellwords' |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
7 |
|
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
8 |
# Following hack is to make hglib.rb working wit both jv:scripts and |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
9 |
# Smalltalk/X rakefiles. |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
10 |
begin |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
11 |
require 'rakelib/inifile' |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
12 |
rescue |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
13 |
begin |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
14 |
require 'inifile' |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
15 |
rescue LoadError => ex |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
16 |
$LOGGER.error(%q{Cannot load package 'inifile'}) |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
17 |
$LOGGER.error(%q{Run 'gem install inifile' to install it}) |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
18 |
exit 1 |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
19 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
20 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
21 |
|
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
22 |
unless $LOGGER |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
23 |
if STDOUT.tty? or win32? |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
24 |
require 'logger' |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
25 |
$LOGGER = Logger.new(STDOUT) |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
26 |
|
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
27 |
if !VERBOSE.nil? |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
28 |
$LOGGER.level = Logger::DEBUG |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
29 |
else |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
30 |
$LOGGER.level = Logger::INFO |
83
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
31 |
end |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
32 |
else |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
33 |
require 'syslog/logger' |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
34 |
$LOGGER = Syslog::Logger.new($0) |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
35 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
36 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
37 |
|
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
38 |
module HG |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
39 |
@@config = nil |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
40 |
|
86
f2a7a4378c22
Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
85
diff
changeset
|
41 |
# Cross-platform way of finding an executable in the $PATH. |
f2a7a4378c22
Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
85
diff
changeset
|
42 |
# |
f2a7a4378c22
Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
85
diff
changeset
|
43 |
# which('ruby') #=> /usr/bin/ruby |
f2a7a4378c22
Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
85
diff
changeset
|
44 |
module_function |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
45 |
|
86
f2a7a4378c22
Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
85
diff
changeset
|
46 |
def which(cmd) |
f2a7a4378c22
Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
85
diff
changeset
|
47 |
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : [''] |
f2a7a4378c22
Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
85
diff
changeset
|
48 |
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:
124
diff
changeset
|
49 |
exts.each {|ext| |
86
f2a7a4378c22
Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
85
diff
changeset
|
50 |
exe = File.join(path, "#{cmd}#{ext}") |
f2a7a4378c22
Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
85
diff
changeset
|
51 |
return exe if File.executable?(exe) && !File.directory?(exe) |
f2a7a4378c22
Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
85
diff
changeset
|
52 |
} |
f2a7a4378c22
Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
85
diff
changeset
|
53 |
end |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
54 |
nil |
86
f2a7a4378c22
Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
85
diff
changeset
|
55 |
end |
f2a7a4378c22
Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
85
diff
changeset
|
56 |
|
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
57 |
GLOBAL_OPTIONS = %i(cwd repository noninteractive config debug debugger encoding |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
58 |
encodingmode traceback time profile version help hidden |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
59 |
) |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
60 |
|
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
61 |
# Execute `hg` command with given positional arguments and |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
62 |
# keyword arguments turned into command options. For example, |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
63 |
# |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
64 |
# HG::hg("heads", "default", cwd: '/tmp/testrepo') |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
65 |
# |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
66 |
# will result in executing |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
67 |
# |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
68 |
# hg --cwd '/tmp/testrepo' heads default |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
69 |
# |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
70 |
# In addition if block is passed, then the block is evaluate with |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
71 |
# `hg` command exit status (as Process::Status) and (optionally) |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
72 |
# with contents of `hg` command stdout and stderr. |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
73 |
# If no block is given, an exception is raised when `hg` command |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
74 |
# exit status IS NOT zero. |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
75 |
def self.hg(command, *args, **options, &block) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
76 |
g_opts = [] |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
77 |
c_opts = [] |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
78 |
options.each do |k, v| |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
79 |
if v != false and !v.nil? |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
80 |
o = k.size == 1 ? "-#{k}" : "--#{k}" |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
81 |
if GLOBAL_OPTIONS.include? k |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
82 |
if v.is_a?(Array) |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
83 |
v.each do |e| |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
84 |
g_opts << o << (e == true ? '' : e) # bug ruby: e ? '' : e does not work correctly |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
85 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
86 |
else |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
87 |
g_opts << o << (v == true ? '' : v) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
88 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
89 |
else |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
90 |
if v.is_a?(Array) |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
91 |
v.each do |e| |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
92 |
c_opts << o << (e == true ? '' : e) |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
93 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
94 |
else |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
95 |
c_opts << o << (v == true ? '' : v) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
96 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
97 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
98 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
99 |
end |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
100 |
c_opts.reject! {|e| e.size == 0} |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
101 |
cmd = ['hg'] + g_opts + [command] + c_opts + args |
68
61d8bee7c4d4
Added new tasks - `workflow:push-upstream` and `workflow:push-staging`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
67
diff
changeset
|
102 |
cmd_info = cmd.shelljoin. |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
103 |
gsub(/username\\=\S+/, "username\\=***"). |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
104 |
gsub(/password\\=\S+/, "password\\=***") |
68
61d8bee7c4d4
Added new tasks - `workflow:push-upstream` and `workflow:push-staging`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
67
diff
changeset
|
105 |
$LOGGER.debug("executing: #{cmd_info}") |
138 | 106 |
if defined? RakeFileUtils and RakeFileUtils.verbose; puts cmd_info; end |
107 |
||
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
108 |
if block_given? |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
109 |
stdout, stderr, status = Open3.capture3(*cmd) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
110 |
case block.arity |
78
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
111 |
when 1 |
228
8566593080a5
hglib: added `HG::Repository#branch()` and `HG::Repository#locate()`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
220
diff
changeset
|
112 |
STDOUT.print stdout if defined? RakeFileUtils and RakeFileUtils.verbose |
8566593080a5
hglib: added `HG::Repository#branch()` and `HG::Repository#locate()`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
220
diff
changeset
|
113 |
STDERR.print stderr if defined? RakeFileUtils and RakeFileUtils.verbose |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
114 |
yield status |
78
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
115 |
when 2 |
228
8566593080a5
hglib: added `HG::Repository#branch()` and `HG::Repository#locate()`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
220
diff
changeset
|
116 |
STDERR.print stderr if defined? RakeFileUtils and RakeFileUtils.verbose |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
117 |
yield status, stdout |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
118 |
when 3 |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
119 |
yield status, stdout, stderr |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
120 |
else |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
121 |
raise Exception.new("invalid arity of given block") |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
122 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
123 |
else |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
124 |
raise Exception.new("command failed: #{cmd.join(' ')}") unless system(*cmd) |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
125 |
end |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
126 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
127 |
|
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
128 |
def self.config |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
129 |
if @@config.nil? |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
130 |
files = Dir.glob('/etc/mercurial/hgrc.d/*.rc') + |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
131 |
['/etc/mercurial/hgrc', |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
132 |
hgrc] |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
133 |
if Gem.win_platform? |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
134 |
hg_exe = HG::which("hg") |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
135 |
hgrc_d = File.join(File.dirname(hg_exe), "hgrc.d") |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
136 |
if File.directory? (hgrc_d) |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
137 |
files += Dir.glob("#{hgrc_d}\\*.rc".gsub('\\', '/')) |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
138 |
end |
83
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
139 |
end |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
140 |
@@config = IniFile.new |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
141 |
files.each do |file| |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
142 |
if File.exist?(file) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
143 |
$LOGGER.debug("Loading global config from \"#{file}\"") |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
144 |
@@config.merge!(IniFile.new(:filename => file)) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
145 |
end |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
146 |
end |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
147 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
148 |
return @@config |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
149 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
150 |
|
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
151 |
def self.hgrc |
83
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
152 |
return File.expand_path('~/.hgrc') |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
153 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
154 |
|
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
155 |
class Repository |
83
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
156 |
@@HOSTS_ON_LAN = {} |
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
157 |
|
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
158 |
attr_accessor :path, :config |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
159 |
|
83
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
160 |
|
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
161 |
private |
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
162 |
# Return --ssh config string for use with passed remote url or nil |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
163 |
# if no special --ssh config is needed. |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
164 |
# |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
165 |
# Rationale: |
83
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
166 |
# |
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
167 |
# On Windows, most of users tend to use TortoiseHG and hg.exe comming with |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
168 |
# it. THG makes hg.exe to use (shipped) plink.exe which is bad for performance |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
169 |
# since it uses 16k channel input buffer (!) leading to a pretty slow transfers |
83
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
170 |
# (a lot of iowaits...) |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
171 |
# OpenSSH OTOH has 2MB input buffer which is good though on Windows bit |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
172 |
# oversized as Windows TCP window size is fixed to 65k for all connections with |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
173 |
# RTT less than 1ms. Still, 65k better then 16k. |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
174 |
# As a workaround, look if MSYS2's OpenSSH client is installed and if so, use that |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
175 |
# one - but only if `ui.ssh` config option has the default value. |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
176 |
# Ugly, isn't it? |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
177 |
def self.sshconf(uri_string) |
83
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
178 |
uri = URI(uri_string) |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
179 |
ssh = nil |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
180 |
if uri.scheme == 'ssh' |
86
f2a7a4378c22
Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
85
diff
changeset
|
181 |
ssh_in_path = HG::which('ssh') ? true : false |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
182 |
if Gem.win_platform? |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
183 |
# Running on Windows |
83
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
184 |
# |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
185 |
# Mercurial uses `ssh` by default, so to use `plink.exe`, `ui.ssh` |
83
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
186 |
# config option has to be explicitly set. |
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
187 |
# |
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
188 |
# It it's set to `plink.exe`, check whether MSYS's `ssh.exe` is available |
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
189 |
# and if so, change it to `ssh.exe`... |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
190 |
ssh_configured = HG::config['ui']['ssh'] |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
191 |
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:
124
diff
changeset
|
192 |
if ssh_in_path |
83
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
193 |
ssh = 'ssh' |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
194 |
else |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
195 |
ssh = %q{"c:\msys64\usr\bin\ssh.exe"} if File.exist? %q{c:\msys64\usr\bin\ssh.exe} |
83
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
196 |
end |
85
6d918f722075
Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
83
diff
changeset
|
197 |
# 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:
83
diff
changeset
|
198 |
# 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:
83
diff
changeset
|
199 |
# If we just start using `ssh.exe` clone/pull might not work beause |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
200 |
# `ssh.exe` cannot talk to `pageant`. So, if we don't find OpenSSH's |
85
6d918f722075
Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
83
diff
changeset
|
201 |
# 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:
124
diff
changeset
|
202 |
if ssh |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
203 |
if ENV['SSH_AUTH_SOCK'] |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
204 |
# Good, OpenSSH agent running but still, be nice and tell the |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
205 |
# user SSH configuration has been tampered wirh. |
85
6d918f722075
Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
83
diff
changeset
|
206 |
$LOGGER.info("Passing --ssh \"#{ssh}\" option to 'hg' command for faster transfers") |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
207 |
else |
85
6d918f722075
Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
83
diff
changeset
|
208 |
# 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:
83
diff
changeset
|
209 |
$LOGGER.warn("Not using -ssh \"#{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:
83
diff
changeset
|
210 |
$LOGGER.warn("For faster clone/pull 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:
83
diff
changeset
|
211 |
ssh = nil |
83
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
212 |
end |
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
213 |
end |
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
214 |
# Turn off SSH compression - data transferred by Mercurial are either |
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
215 |
# already compressed or --uncompressed was given to reduce CPU load |
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
216 |
# in which case passing -C would reduce it further. |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
217 |
ssh += ' -C' if ssh and HG::Repository::host_on_lan?(uri.host) |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
218 |
end |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
219 |
else |
83
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
220 |
# Turn off SSH compression - data transferred by Mercurial are either |
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
221 |
# already compressed or --uncompressed was given to reduce CPU load |
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
222 |
# in which case passing -C would reduce it further. |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
223 |
ssh = 'ssh -C' if ssh_in_path and HG::Repository::host_on_lan?(uri.host) |
83
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
224 |
end |
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
225 |
end |
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
226 |
return ssh |
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
227 |
end |
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
228 |
|
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
229 |
# Same as class method, but allows for remote aliases |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
230 |
def sshconf(remote) |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
231 |
HG::Repository::sshconf(self.paths[remote] || remote) |
83
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
232 |
end |
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
233 |
|
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
234 |
# Given a hostname, return true if the host is on local LAN, false |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
235 |
# otherwise. |
83
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
236 |
# |
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
237 |
# Results are cached to reduce resolver queries (maybe not worth it, |
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
238 |
# system may cache answers anyways) |
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
239 |
# |
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
240 |
# The detection is rather simplistic - it only checks if host's address |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
241 |
# is from private IP range - and only for IPv4. |
83
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
242 |
# This may cause problems when using over VPN that assigns private address |
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
243 |
# (the usuall case). In that case this code will treat is a local |
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
244 |
# which may result in transfer of uncompressed data over WAN. Not nice, |
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
245 |
# This should be fixed, somehow. |
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
246 |
def self.host_on_lan?(hostname) |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
247 |
unless @@HOSTS_ON_LAN.has_key? hostname |
83
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
248 |
require 'resolv' |
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
249 |
addr = Resolv.getaddress(hostname) |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
250 |
# Really poor detection of LAN, but since this is an |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
251 |
# optimization, getting this wrong does not hurt. |
83
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
252 |
local = (addr.start_with? '192.168.') or (addr.start_with? '10.10.') |
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
253 |
@@HOSTS_ON_LAN[hostname] = local |
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
254 |
end |
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
255 |
return @@HOSTS_ON_LAN[hostname] |
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
256 |
end |
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
257 |
|
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
258 |
public |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
259 |
# Clone a repository from given `uri` to given `directory`. |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
260 |
# Returns an `HG::Repository` instance representing the repository |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
261 |
# clone. |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
262 |
# If `noupdate` is true, working copy is not updated, i.e., will be |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
263 |
# empty. Use this when you're going to issue `update(rev)` shortly after. |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
264 |
# |
101
32f9287b419a
Cleanup: Nuked leftover code for using BCC 5.5.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
89
diff
changeset
|
265 |
def self.clone(uri, directory, noupdate: false, publishing: false) |
83
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
266 |
uri_obj = URI(uri) |
76
df28d45f7f5a
On Windows use MSYS2 `ssh.exe` rather than `plink.exe` to clone/checkout repositories over SSH
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
75
diff
changeset
|
267 |
host = uri_obj.host |
83
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
268 |
scheme = uri_obj.scheme |
75
9b57c88b2ab3
Use `hg clone` instead of `hg init` followed by `hg pull` to checkout a Mercurial repository
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
73
diff
changeset
|
269 |
# When cloning over LAN, use --uncompressed option |
9b57c88b2ab3
Use `hg clone` instead of `hg init` followed by `hg pull` to checkout a Mercurial repository
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
73
diff
changeset
|
270 |
# as it tends to be faster if bandwidth is good (1GB norm |
76
df28d45f7f5a
On Windows use MSYS2 `ssh.exe` rather than `plink.exe` to clone/checkout repositories over SSH
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
75
diff
changeset
|
271 |
# these days) amd saves some CPU cycles. |
83
8405c22a8ffd
Use customized ssh command for all commands involving data transfer (in addition to `clone`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
79
diff
changeset
|
272 |
local = HG::Repository::host_on_lan?(URI(uri).host) |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
273 |
ssh = HG::Repository::sshconf(uri) |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
274 |
|
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
275 |
HG::hg('clone', uri, directory, ssh: ssh, uncompressed: local, noupdate: noupdate, config: "phases.publish=#{publishing}") |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
276 |
return HG::Repository.new(directory) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
277 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
278 |
|
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
279 |
# Initializes an empty repository in given directory. Returns an |
67
75b6eb7b781c
Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
66
diff
changeset
|
280 |
# `HG::Repository` instance representing the created (empty) repository. |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
281 |
# TODO: unreachable code!!! |
67
75b6eb7b781c
Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
66
diff
changeset
|
282 |
def self.init(directory) |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
283 |
HG::hg('init', directory) |
67
75b6eb7b781c
Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
66
diff
changeset
|
284 |
return HG::Repository.new(directory) |
75b6eb7b781c
Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
66
diff
changeset
|
285 |
end |
75b6eb7b781c
Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
66
diff
changeset
|
286 |
|
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
287 |
# Like HG::hg, but passes --cwd @path |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
288 |
def hg(command, *args, **options, &block) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
289 |
options[:cwd] = @path |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
290 |
HG::hg(command, *args, **options, &block) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
291 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
292 |
|
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
293 |
def hgrc |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
294 |
File.join(@path, '.hg', 'hgrc') |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
295 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
296 |
|
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
297 |
def initialize(directory) |
234
05943c900d5e
Rakefiles: added new target `artifacts:source`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
228
diff
changeset
|
298 |
dir = File.expand_path(directory) |
05943c900d5e
Rakefiles: added new target `artifacts:source`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
228
diff
changeset
|
299 |
if not File.exist?(File.join(dir, '.hg')) |
05943c900d5e
Rakefiles: added new target `artifacts:source`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
228
diff
changeset
|
300 |
raise Exception.new("Not a Mercurial repository (missing .hg directory): #{dir}") |
05943c900d5e
Rakefiles: added new target `artifacts:source`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
228
diff
changeset
|
301 |
end |
05943c900d5e
Rakefiles: added new target `artifacts:source`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
228
diff
changeset
|
302 |
@path = dir |
05943c900d5e
Rakefiles: added new target `artifacts:source`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
228
diff
changeset
|
303 |
initialize_config |
120
2c4e52c4c930
Do not use `hg clone ...` to create and pull changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
101
diff
changeset
|
304 |
end |
2c4e52c4c930
Do not use `hg clone ...` to create and pull changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
101
diff
changeset
|
305 |
|
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
306 |
def initialize_config |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
307 |
config_file = hgrc |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
308 |
if File.exist? (config_file) |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
309 |
$LOGGER.debug("Loading repository config from \"#{config_file}\"") |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
310 |
@config = HG::config().merge(IniFile.new(:filename => config_file)) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
311 |
else |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
312 |
@config = HG::config() |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
313 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
314 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
315 |
|
120
2c4e52c4c930
Do not use `hg clone ...` to create and pull changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
101
diff
changeset
|
316 |
# Add / replace given config options and write back |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
317 |
# .hg/hgrc |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
318 |
def config_set(**options) |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
319 |
config = IniFile.new(:filename => self.hgrc) |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
320 |
options.each do |section, keys_and_values| |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
321 |
keys_and_values.each {|key, value| config[section][key] = value.to_s} |
120
2c4e52c4c930
Do not use `hg clone ...` to create and pull changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
101
diff
changeset
|
322 |
end |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
323 |
config.write |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
324 |
initialize_config |
120
2c4e52c4c930
Do not use `hg clone ...` to create and pull changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
101
diff
changeset
|
325 |
end |
2c4e52c4c930
Do not use `hg clone ...` to create and pull changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
101
diff
changeset
|
326 |
|
67
75b6eb7b781c
Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
66
diff
changeset
|
327 |
# Return a hashmap with defined paths (alias => uri) |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
328 |
def paths |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
329 |
@config['paths'].clone |
67
75b6eb7b781c
Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
66
diff
changeset
|
330 |
end |
75b6eb7b781c
Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
66
diff
changeset
|
331 |
|
75b6eb7b781c
Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
66
diff
changeset
|
332 |
# Set paths for given repository |
75b6eb7b781c
Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
66
diff
changeset
|
333 |
def paths=(paths) |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
334 |
config_set(paths: paths) |
67
75b6eb7b781c
Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
66
diff
changeset
|
335 |
end |
75b6eb7b781c
Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
66
diff
changeset
|
336 |
|
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
337 |
def log(revset, template = "{node|short}\n") |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
338 |
log = [] |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
339 |
hg('log', rev: revset, template: template) do |status, out| |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
340 |
if status.success? |
228
8566593080a5
hglib: added `HG::Repository#branch()` and `HG::Repository#locate()`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
220
diff
changeset
|
341 |
puts out if defined? RakeFileUtils and RakeFileUtils.verbose |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
342 |
log = out.split("\n") |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
343 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
344 |
end |
228
8566593080a5
hglib: added `HG::Repository#branch()` and `HG::Repository#locate()`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
220
diff
changeset
|
345 |
return log |
8566593080a5
hglib: added `HG::Repository#branch()` and `HG::Repository#locate()`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
220
diff
changeset
|
346 |
end |
8566593080a5
hglib: added `HG::Repository#branch()` and `HG::Repository#locate()`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
220
diff
changeset
|
347 |
|
8566593080a5
hglib: added `HG::Repository#branch()` and `HG::Repository#locate()`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
220
diff
changeset
|
348 |
def locate(revset = '.', pattern: '*') |
8566593080a5
hglib: added `HG::Repository#branch()` and `HG::Repository#locate()`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
220
diff
changeset
|
349 |
files = [] |
8566593080a5
hglib: added `HG::Repository#branch()` and `HG::Repository#locate()`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
220
diff
changeset
|
350 |
hg('locate', rev: revset, include: pattern) do |status, out| |
8566593080a5
hglib: added `HG::Repository#branch()` and `HG::Repository#locate()`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
220
diff
changeset
|
351 |
if status.success? |
8566593080a5
hglib: added `HG::Repository#branch()` and `HG::Repository#locate()`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
220
diff
changeset
|
352 |
files = out.split("\n") |
8566593080a5
hglib: added `HG::Repository#branch()` and `HG::Repository#locate()`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
220
diff
changeset
|
353 |
end |
8566593080a5
hglib: added `HG::Repository#branch()` and `HG::Repository#locate()`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
220
diff
changeset
|
354 |
end |
8566593080a5
hglib: added `HG::Repository#branch()` and `HG::Repository#locate()`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
220
diff
changeset
|
355 |
return files |
8566593080a5
hglib: added `HG::Repository#branch()` and `HG::Repository#locate()`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
220
diff
changeset
|
356 |
end |
8566593080a5
hglib: added `HG::Repository#branch()` and `HG::Repository#locate()`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
220
diff
changeset
|
357 |
|
8566593080a5
hglib: added `HG::Repository#branch()` and `HG::Repository#locate()`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
220
diff
changeset
|
358 |
# Return current branch name |
8566593080a5
hglib: added `HG::Repository#branch()` and `HG::Repository#locate()`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
220
diff
changeset
|
359 |
def branch() |
8566593080a5
hglib: added `HG::Repository#branch()` and `HG::Repository#locate()`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
220
diff
changeset
|
360 |
hg('branch') do | status, out | |
8566593080a5
hglib: added `HG::Repository#branch()` and `HG::Repository#locate()`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
220
diff
changeset
|
361 |
if status.success? |
8566593080a5
hglib: added `HG::Repository#branch()` and `HG::Repository#locate()`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
220
diff
changeset
|
362 |
return out.strip() |
8566593080a5
hglib: added `HG::Repository#branch()` and `HG::Repository#locate()`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
220
diff
changeset
|
363 |
end |
8566593080a5
hglib: added `HG::Repository#branch()` and `HG::Repository#locate()`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
220
diff
changeset
|
364 |
end |
8566593080a5
hglib: added `HG::Repository#branch()` and `HG::Repository#locate()`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
220
diff
changeset
|
365 |
raise Exception.new("Failed to retrieve current branch") |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
366 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
367 |
|
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
368 |
# Return changeset IDs of all head revisions. |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
369 |
# If `branch` is given, return only heads in given |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
370 |
# branch. |
220
8faa459a7ee9
Rakefiles: do not consider secret changesets as heads when updating
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
186
diff
changeset
|
371 |
# If `secret_secret` is false, then changesets in |
8faa459a7ee9
Rakefiles: do not consider secret changesets as heads when updating
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
186
diff
changeset
|
372 |
# secret phase are ignored (even if thet're heads |
8faa459a7ee9
Rakefiles: do not consider secret changesets as heads when updating
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
186
diff
changeset
|
373 |
def heads(branch = nil, include_secret: true) |
8faa459a7ee9
Rakefiles: do not consider secret changesets as heads when updating
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
186
diff
changeset
|
374 |
revset = "head()" |
8faa459a7ee9
Rakefiles: do not consider secret changesets as heads when updating
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
186
diff
changeset
|
375 |
revset += " and branch('#{branch}')" if branch |
8faa459a7ee9
Rakefiles: do not consider secret changesets as heads when updating
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
186
diff
changeset
|
376 |
revset += " and !secret()" if not include_secret |
8faa459a7ee9
Rakefiles: do not consider secret changesets as heads when updating
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
186
diff
changeset
|
377 |
return log(revset) |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
378 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
379 |
|
72
3e832d54a4af
Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
71
diff
changeset
|
380 |
# Return name of an active bookmark or nil if no bookmark |
3e832d54a4af
Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
71
diff
changeset
|
381 |
# is active |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
382 |
def bookmark |
72
3e832d54a4af
Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
71
diff
changeset
|
383 |
filename = File.join(@path, '.hg', 'bookmarks.current') |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
384 |
if File.exist?(filename) |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
385 |
file = File.open(filename, 'r') |
72
3e832d54a4af
Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
71
diff
changeset
|
386 |
begin |
3e832d54a4af
Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
71
diff
changeset
|
387 |
bookmark = file.read.chomp |
3e832d54a4af
Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
71
diff
changeset
|
388 |
ensure |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
389 |
file.close |
72
3e832d54a4af
Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
71
diff
changeset
|
390 |
end |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
391 |
bookmark |
72
3e832d54a4af
Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
71
diff
changeset
|
392 |
else |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
393 |
nil |
72
3e832d54a4af
Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
71
diff
changeset
|
394 |
end |
3e832d54a4af
Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
71
diff
changeset
|
395 |
end |
3e832d54a4af
Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
71
diff
changeset
|
396 |
|
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
397 |
# Return a hash "bookmark => revision" of all |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
398 |
# bookmarks. |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
399 |
def bookmarks(branch = nil) |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
400 |
revset = 'bookmark()' |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
401 |
revset += " and branch('#{branch}')" if branch |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
402 |
bookmarks = {} |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
403 |
self.log(revset, "{bookmarks}|{node|short}\n").each do |line| |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
404 |
bookmarks_per_changeset, changesetid = line.split('|') |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
405 |
bookmarks_per_changeset.split(' ').each {|bookmark| bookmarks[bookmark] = changesetid} |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
406 |
end |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
407 |
bookmarks |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
408 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
409 |
|
78
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
410 |
# a private helper to generate auth --config options for |
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
411 |
# HTTP-served repositories |
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
412 |
protected |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
413 |
def authconf(remote, user, pass) |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
414 |
authconf = [] |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
415 |
unless pass.nil? |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
416 |
raise Exception.new('Password given but not username! Use user: named param to specify username.') if user.nil? |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
417 |
# If user/password is provided, make sure we don't have |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
418 |
# username in remote URI. Otherwise Mercurial won't use |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
419 |
# password from config! |
71
68c8cccbdec5
Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
68
diff
changeset
|
420 |
uri = URI.parse(self.paths[remote] || remote) |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
421 |
uri.user = nil |
71
68c8cccbdec5
Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
68
diff
changeset
|
422 |
uri = uri.to_s |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
423 |
uri_alias = self.paths.has_key? remote ? remote : 'xxx' |
71
68c8cccbdec5
Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
68
diff
changeset
|
424 |
authconf << "auth.#{uri_alias}.prefix=#{uri}" |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
425 |
authconf << "auth.#{uri_alias}.username=#{user}" |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
426 |
authconf << "auth.#{uri_alias}.password=#{pass}" |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
427 |
end |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
428 |
authconf |
78
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
429 |
end |
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
430 |
|
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
431 |
public |
78
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
432 |
|
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
433 |
def incoming(remote = 'default', user: nil, pass: nil, rev: nil) |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
434 |
hg('incoming', remote, ssh: sshconf(remote), config: authconf(remote, user, pass), rev: rev) do |status, stdout| |
78
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
435 |
case status.exitstatus |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
436 |
when 0 |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
437 |
STDOUT.print stdout |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
438 |
when 1 |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
439 |
puts "No new changes coming from #{remote}" |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
440 |
else |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
441 |
raise Exception.new("Failed to do 'incoming' from #{remote} (exit code #{status.exitstatus})") |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
442 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
443 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
444 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
445 |
|
78
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
446 |
def pull(remote = 'default', user: nil, pass: nil, rev: nil, bookmarks: nil) |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
447 |
hg('pull', remote, ssh: sshconf(remote), config: authconf(remote, user, pass), rev: rev, bookmark: bookmarks) do |status, stdout| |
78
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
448 |
STDOUT.print stdout |
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
449 |
case status.exitstatus |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
450 |
when 0 |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
451 |
#nothing |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
452 |
when 1 |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
453 |
raise Exception.new("Failed to 'pull' from #{remote} (update had unresolved conflicts)") |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
454 |
else |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
455 |
raise Exception.new("Failed to 'pull' from #{remote} (exit code #{status.exitstatus})") |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
456 |
end |
78
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
457 |
end |
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
458 |
end |
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
459 |
|
127
664296ccdb4a
Improved tasks `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
124
diff
changeset
|
460 |
def outgoing(remote = 'default', user: nil, pass: nil, rev: nil, &block) |
138 | 461 |
if !block_given? |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
462 |
hg('outgoing', remote, ssh: sshconf(remote), config: authconf(remote, user, pass), rev: rev) do |status, stdout| |
78
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
463 |
case status.exitstatus |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
464 |
when 0 |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
465 |
STDOUT.print stdout |
127
664296ccdb4a
Improved tasks `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
124
diff
changeset
|
466 |
when 1 |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
467 |
puts "No new changes going to #{remote}" |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
468 |
else |
127
664296ccdb4a
Improved tasks `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
124
diff
changeset
|
469 |
raise Exception.new("Failed to do 'outgoing' from #{remote} (exit code #{status.exitstatus})") |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
470 |
end |
78
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
471 |
end |
127
664296ccdb4a
Improved tasks `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
124
diff
changeset
|
472 |
else |
138 | 473 |
hg('outgoing', remote, ssh: sshconf(remote), config: authconf(remote, user, pass), rev: rev, &block) |
78
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
474 |
end |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
475 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
476 |
|
78
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
477 |
def push(remote = 'default', user: nil, pass: nil, rev: nil, bookmarks: []) |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
478 |
hg('push', remote, ssh: sshconf(remote), config: authconf(remote, user, pass), rev: rev, bookmark: bookmarks) do |status, stdout, stderr| |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
479 |
STDOUT.puts stdout |
186
8b97e4435ddd
Fixed slip in `hglib.rb` introduced in commit e665031cade7
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
138
diff
changeset
|
480 |
unless status.exitstatus == 0 or status.exitstatus == 1 |
124
d89325244d7c
hglib: show `hg` output when pushing to remote repositories
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
120
diff
changeset
|
481 |
STDERR.puts stderr |
78
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
482 |
raise Exception.new("Failed to 'push' from #{remote} (exit code #{status.exitstatus})") |
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
483 |
end |
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
484 |
end |
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
485 |
end |
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
486 |
|
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
487 |
|
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
488 |
# Create a shared clone in given directory, Return a new |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
489 |
# HG::Repository object on the shared clone |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
490 |
def share(dst, rev = nil) |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
491 |
raise Exception.new("Destination file exists: #{dst}") if File.exist? dst |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
492 |
rev = log('.')[0] if rev.nil? |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
493 |
raise Exception.new("Revision #{rev} does not exist") unless has_revision? rev |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
494 |
mkdir_p File.dirname(dst) |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
495 |
HG::hg('share', path, dst, config: 'extensions.share=', noupdate: true, bookmarks: false) |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
496 |
share = Repository.new(dst) |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
497 |
share.update(rev) |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
498 |
share |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
499 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
500 |
|
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
501 |
# Updates the repository's working copy to given |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
502 |
# revision if given. If not, update to most-recent |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
503 |
# head, as plain |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
504 |
# |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
505 |
# hg update |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
506 |
# |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
507 |
# would do. |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
508 |
def update(rev = nil) |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
509 |
if rev |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
510 |
raise Exception.new("Revision #{rev} does not exist") unless has_revision? rev |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
511 |
hg('update', rev: rev) |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
512 |
else |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
513 |
hg('update') |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
514 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
515 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
516 |
|
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
517 |
# Merge given revision. Return true, if the merge was |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
518 |
# successful, false otherwise |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
519 |
def merge(rev) |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
520 |
raise Exception.new("Revision #{rev} does not exist") unless has_revision? rev |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
521 |
hg('merge', rev) {|status| return status.success?} |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
522 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
523 |
|
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
524 |
def commit(message, user='') |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
525 |
user = @config['ui']['username'] unless @config['ui'].has_key? 'username' |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
526 |
hg('commit', message: message, user: user) |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
527 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
528 |
|
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
529 |
def has_revision?(rev) |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
530 |
revs = log(rev) |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
531 |
revs.size > 0 |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
532 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
533 |
|
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
534 |
# Lookup a repository in given `directory`. If found, |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
535 |
# return it as instance of HG::Repository. If not, |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
536 |
# `nil` is returned. |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
537 |
def self.lookup(directory) |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
538 |
return nil unless File.exist?(directory) |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
539 |
repo_dir = directory |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
540 |
until repo_dir.nil? |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
541 |
return Repository.new(repo_dir) if HG::repository? repo_dir |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
542 |
repo_dir_parent = File.dirname(repo_dir) |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
543 |
repo_dir_parent == repo_dir ? (repo_dir = nil) : (repo_dir = repo_dir_parent) |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
544 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
545 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
546 |
|
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
547 |
# Initializes and empty Mercurial repository in given `directory` |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
548 |
def self.init(directory) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
549 |
FileUtils.mkdir_p File.dirname(directory) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
550 |
HG::hg("init", directory) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
551 |
return Repository.new(directory) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
552 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
553 |
end # class Repository |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
554 |
|
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
555 |
# Return `true` if given `directory` is a root of mercurial |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
556 |
# repository, `false` otherwise. |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
557 |
def self.repository?(directory) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
558 |
return File.directory? File.join(directory, '.hg') |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
559 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
560 |
|
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
561 |
# Enumerate all repositories in given `directory` |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
562 |
def self.forest(directory, &block) |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
563 |
yield Repository.new(directory) if repository? directory |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
564 |
Dir.foreach(directory) do |x| |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
565 |
path = File.join(directory, x) |
137
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
566 |
if File.directory? path |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
567 |
if x == '.' or x == '..' or x == '.svn' or x == '.git' |
e665031cade7
Cleaning up code and having it more rubyish
Patrik Svestka <patrik.svestka@gmail.com>
parents:
124
diff
changeset
|
568 |
next |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
569 |
elsif File.directory?(path) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
570 |
forest(path, &block) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
571 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
572 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
573 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
574 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
575 |
end # module HG |