author | Jan Vrany <jan.vrany@fit.cvut.cz> |
Mon, 05 Dec 2016 22:20:56 +0000 | |
changeset 89 | 3fae142744f4 |
parent 86 | f2a7a4378c22 |
child 101 | 32f9287b419a |
permissions | -rwxr-xr-x |
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 |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
16 |
$LOGGER.error("Cannot load package 'inifile'") |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
17 |
$LOGGER.error("Run 'gem install inifile' to install it") |
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 |
|
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
22 |
if not $LOGGER then |
69
23cdc822cfc5
Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
68
diff
changeset
|
23 |
if STDOUT.tty? or win32? then |
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) |
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
|
26 |
|
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
|
27 |
if (VERBOSE != nil) then |
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
|
28 |
$LOGGER.level = Logger::DEBUG |
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
|
29 |
else |
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
|
30 |
$LOGGER.level = Logger::INFO |
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 |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
32 |
else |
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' |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
34 |
$LOGGER = Syslog::Logger.new($0) |
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 |
f2a7a4378c22
Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
85
diff
changeset
|
45 |
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
|
46 |
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
|
47 |
ENV['PATH'].split(File::PATH_SEPARATOR).each do |path| |
f2a7a4378c22
Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
85
diff
changeset
|
48 |
exts.each { |ext| |
f2a7a4378c22
Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
85
diff
changeset
|
49 |
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
|
50 |
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
|
51 |
} |
f2a7a4378c22
Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
85
diff
changeset
|
52 |
end |
f2a7a4378c22
Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
85
diff
changeset
|
53 |
return nil |
f2a7a4378c22
Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
85
diff
changeset
|
54 |
end |
f2a7a4378c22
Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
85
diff
changeset
|
55 |
|
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
56 |
GLOBAL_OPTIONS= [:'cwd', :'repository', :'noninteractive', :'config', :'debug', :'debugger', |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
57 |
:'encoding',:'encodingmode',:'traceback',:'time', :'profile',:'version', :'help', |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
58 |
:'hidden' ] |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
59 |
# Execute `hg` command with given positional arguments and |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
60 |
# keyword arguments turned into command options. For example, |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
61 |
# |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
62 |
# 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
|
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 |
# will result in executing |
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 |
# 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
|
67 |
# |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
68 |
# 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
|
69 |
# `hg` command exit status (as Process::Status) and (optionally) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
70 |
# with contents of `hg` command stdout and stderr. |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
71 |
# If no block is given, an exception is raised when `hg` command |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
72 |
# 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
|
73 |
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
|
74 |
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
|
75 |
c_opts = [] |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
76 |
options.each do | k , v | |
71
68c8cccbdec5
Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
68
diff
changeset
|
77 |
if v != false and v != 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
|
78 |
o = k.size == 1 ? "-#{k}" : "--#{k}" |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
79 |
if GLOBAL_OPTIONS.include? k then |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
80 |
if v.kind_of?(Array) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
81 |
v.each do | e | |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
82 |
g_opts << o << (e == true ? '' : e) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
83 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
84 |
else |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
85 |
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
|
86 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
87 |
else |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
88 |
if v.kind_of?(Array) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
89 |
v.each do | e | |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
90 |
c_opts << o << (e == true ? '' : e) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
91 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
92 |
else |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
93 |
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
|
94 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
95 |
end |
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 |
c_opts.reject! { | e | e.size == 0 } |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
99 |
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
|
100 |
cmd_info = cmd.shelljoin. |
61d8bee7c4d4
Added new tasks - `workflow:push-upstream` and `workflow:push-staging`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
67
diff
changeset
|
101 |
gsub(/username\\=\S+/, "username\\=***"). |
61d8bee7c4d4
Added new tasks - `workflow:push-upstream` and `workflow:push-staging`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
67
diff
changeset
|
102 |
gsub(/password\\=\S+/, "password\\=***") |
61d8bee7c4d4
Added new tasks - `workflow:push-upstream` and `workflow:push-staging`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
67
diff
changeset
|
103 |
$LOGGER.debug("executing: #{cmd_info}") |
67
75b6eb7b781c
Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
66
diff
changeset
|
104 |
if defined? RakeFileUtils then |
68
61d8bee7c4d4
Added new tasks - `workflow:push-upstream` and `workflow:push-staging`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
67
diff
changeset
|
105 |
puts cmd_info |
67
75b6eb7b781c
Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
66
diff
changeset
|
106 |
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
|
107 |
if block_given? then |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
108 |
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
|
109 |
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
|
110 |
when 1 |
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 |
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
|
112 |
STDERR.print stderr |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
113 |
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
|
114 |
when 2 |
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 |
STDERR.print stderr |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
116 |
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
|
117 |
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
|
118 |
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
|
119 |
else |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
120 |
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
|
121 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
122 |
else |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
123 |
if not system(*cmd) then |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
124 |
raise Exception.new("command failed: #{cmd.join(' ')}") |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
125 |
end |
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 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
128 |
|
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
129 |
def self.config() |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
130 |
if @@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
|
131 |
files = Dir.glob('/etc/mercurial/hgrc.d/*.rc') + |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
132 |
[ '/etc/mercurial/hgrc' , |
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
|
133 |
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
|
134 |
if Gem.win_platform? then |
86
f2a7a4378c22
Added task `workflow:merge' to ease merging code from eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
85
diff
changeset
|
135 |
hg_exe = HG::which("hg") |
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
|
136 |
hgrc_d = File.join(File.dirname(hg_exe), "hgrc.d") |
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
|
137 |
if File.directory? (hgrc_d) then |
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
|
138 |
files += Dir.glob("#{hgrc_d}\\*.rc".gsub('\\', '/')) |
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 |
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
|
140 |
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
|
141 |
@@config = IniFile.new() |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
142 |
files.each do | 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 |
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
|
144 |
$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
|
145 |
@@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
|
146 |
end |
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 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
149 |
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
|
150 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
151 |
|
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
152 |
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
|
153 |
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
|
154 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
155 |
|
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
156 |
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
|
157 |
@@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
|
158 |
|
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
159 |
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
|
160 |
|
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
|
161 |
|
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 |
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
|
163 |
# Return --ssh config string for use with passed remote url or nil |
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
|
164 |
# if no special --ssh config is needed. |
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
|
165 |
# |
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 |
# Rationale: |
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 |
# |
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
|
168 |
# On Windows, most of users tend to use TortoiseHG and hg.exe comming with |
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
|
169 |
# it. THG makes hg.exe to use (shipped) plink.exe which is bad for performance |
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 |
# since it uses 16k channel input buffer (!) leading to a pretty slow transfers |
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
|
171 |
# (a lot of iowaits...) |
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
|
172 |
# OpenSSH OTOH has 2MB input buffer which is good though on Windows bit |
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
|
173 |
# oversized as Windows TCP window size is fixed to 65k for all connections with |
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
|
174 |
# RTT less than 1ms. Still, 65k better then 16k. |
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
|
175 |
# As a workaround, look if MSYS2's OpenSSH client is installed and if so, use that |
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
|
176 |
# one - but only if `ui.ssh` config option has the default value. |
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
|
177 |
# Ugly, isn't 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
|
178 |
def self.sshconf(uri_string) |
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
|
179 |
uri = URI(uri_string) |
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
|
180 |
ssh = nil |
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
|
181 |
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
|
182 |
ssh_in_path = HG::which('ssh') ? true : 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
|
183 |
if Gem.win_platform? then |
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 |
# Running on Windows |
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
|
185 |
# |
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 |
# Mercurial uses `ssh` by default, so to use `plink.exe`, `ui.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
|
187 |
# 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
|
188 |
# |
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 |
# 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
|
190 |
# and if so, change it to `ssh.exe`... |
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
|
191 |
ssh_configured = HG::config['ui']['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
|
192 |
if /^.*[pP]link.exe"?\s*(-ssh)?\s*(-2)?$/ =~ ssh_configured then |
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 |
if ssh_in_path then |
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
|
194 |
ssh = '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
|
195 |
else |
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 |
if (File.exist? "c:\\msys64\\usr\\bin\\ssh.exe") then |
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
|
197 |
ssh = "\"c:\\msys64\\usr\\bin\\ssh.exe\"" |
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
|
198 |
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
|
199 |
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
|
200 |
# 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
|
201 |
# 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
|
202 |
# If we just start using `ssh.exe` clone/pull might not work beause |
6d918f722075
Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
83
diff
changeset
|
203 |
# `ssh.exe` cannot talk to `pageant`. So, if we don't find OpenSSH's |
6d918f722075
Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
83
diff
changeset
|
204 |
# style of agent, don't use `ssh.exe` event if available. |
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
|
205 |
if ssh then |
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 |
if ENV['SSH_AUTH_SOCK'] then |
6d918f722075
Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
83
diff
changeset
|
207 |
# Good, OpenSSH agent running but still, be nice and tell the |
6d918f722075
Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
83
diff
changeset
|
208 |
# user SSH configuration has been tampered wirh. |
6d918f722075
Do not tamper with SSH configuration if SSH agent is not running.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
83
diff
changeset
|
209 |
$LOGGER.info("Passing --ssh \"#{ssh}\" option to 'hg' command for faster transfers") |
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 |
else |
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 |
# 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
|
212 |
$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
|
213 |
$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
|
214 |
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
|
215 |
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
|
216 |
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
|
217 |
# 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
|
218 |
# 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
|
219 |
# in which case passing -C would reduce it further. |
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 |
if ssh and HG::Repository::host_on_lan?(uri.host) then |
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 |
ssh += " -C" |
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 |
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
|
223 |
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
|
224 |
else |
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 |
# 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
|
226 |
# 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
|
227 |
# in which case passing -C would reduce it further. |
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 |
if ssh_in_path and HG::Repository::host_on_lan?(uri.host) then |
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 |
ssh = "ssh -C" |
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
|
230 |
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
|
231 |
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
|
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 |
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
|
234 |
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
|
235 |
|
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 |
# Same as class method, but allows for remote aliases |
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 |
def sshconf(remote) |
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 |
return HG::Repository::sshconf(self.paths[remote] || remote) |
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 |
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
|
240 |
|
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
|
241 |
# Given a hostname, return true if the host is on local LAN, false |
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 |
# otherwise. |
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 |
# |
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 |
# 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
|
245 |
# 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
|
246 |
# |
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
|
247 |
# The detection is rather simplistic - it only checks if host's 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
|
248 |
# is from private IP range - and only for IPv4. |
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 |
# 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
|
250 |
# (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
|
251 |
# 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
|
252 |
# 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
|
253 |
def self.host_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
|
254 |
if not @@HOSTS_ON_LAN.has_key? hostname then |
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 |
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
|
256 |
addr = Resolv.getaddress(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
|
257 |
# Really poor detection of LAN, but since this is an |
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 |
# optimization, getting this wrong does not hurt. |
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
|
259 |
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
|
260 |
@@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
|
261 |
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
|
262 |
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
|
263 |
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
|
264 |
|
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
|
265 |
public |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
266 |
# Clone a repository from given `uri` to 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
|
267 |
# Returns an `HG::Repository` instance representing the repository |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
268 |
# clone. |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
269 |
# 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
|
270 |
# 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
|
271 |
# |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
272 |
def self.clone(uri, directory, noupdate: 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
|
273 |
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
|
274 |
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
|
275 |
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
|
276 |
# 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
|
277 |
# 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
|
278 |
# 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
|
279 |
local = HG::Repository::host_on_lan?(URI(uri).host) |
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
|
280 |
ssh = HG::Repository::sshconf(uri) |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
281 |
if noupdate then |
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
|
282 |
HG::hg("clone", uri, directory, ssh: ssh, uncompressed: local, noupdate: true) |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
283 |
else |
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
|
284 |
HG::hg("clone", uri, directory, ssh: ssh, uncompressed: local) |
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
285 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
286 |
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
|
287 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
288 |
|
67
75b6eb7b781c
Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
66
diff
changeset
|
289 |
# Initializes an empty repository in given directory. Returns an |
75b6eb7b781c
Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
66
diff
changeset
|
290 |
# `HG::Repository` instance representing the created (empty) repository. |
75b6eb7b781c
Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
66
diff
changeset
|
291 |
def self.init(directory) |
75b6eb7b781c
Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
66
diff
changeset
|
292 |
HG::hg("init", directory) |
75b6eb7b781c
Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
66
diff
changeset
|
293 |
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
|
294 |
end |
75b6eb7b781c
Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
66
diff
changeset
|
295 |
|
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
296 |
# 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
|
297 |
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
|
298 |
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
|
299 |
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
|
300 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
301 |
|
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
302 |
def hgrc() |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
303 |
return File.join(@path, '.hg', 'hgrc') |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
304 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
305 |
|
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
306 |
def initialize(directory) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
307 |
@path = directory |
68
61d8bee7c4d4
Added new tasks - `workflow:push-upstream` and `workflow:push-staging`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
67
diff
changeset
|
308 |
config_file = 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
|
309 |
if File.exist? ( 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 |
$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
|
311 |
@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
|
312 |
else |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
313 |
@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
|
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 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
316 |
|
67
75b6eb7b781c
Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
66
diff
changeset
|
317 |
# Return a hashmap with defined paths (alias => uri) |
75b6eb7b781c
Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
66
diff
changeset
|
318 |
def paths() |
75b6eb7b781c
Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
66
diff
changeset
|
319 |
return @config['paths'].clone |
75b6eb7b781c
Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
66
diff
changeset
|
320 |
end |
75b6eb7b781c
Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
66
diff
changeset
|
321 |
|
75b6eb7b781c
Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
66
diff
changeset
|
322 |
# 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
|
323 |
def paths=(paths) |
75b6eb7b781c
Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
66
diff
changeset
|
324 |
config = IniFile.new(:filename => self.hgrc()) |
75b6eb7b781c
Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
66
diff
changeset
|
325 |
config['paths'] = paths |
75b6eb7b781c
Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
66
diff
changeset
|
326 |
config.write() |
75b6eb7b781c
Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
66
diff
changeset
|
327 |
end |
75b6eb7b781c
Added support for canonical, upstream and staging repositores.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
66
diff
changeset
|
328 |
|
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
329 |
def log(revset, template = "{node|short}\n") |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
330 |
log = [] |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
331 |
hg("log", rev: revset, template: template) do | status, out | |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
332 |
if status.success? |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
333 |
puts out |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
334 |
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
|
335 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
336 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
337 |
return log |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
338 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
339 |
|
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
340 |
# 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
|
341 |
# 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
|
342 |
# branch. |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
343 |
def heads(branch = nil) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
344 |
if branch then |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
345 |
return log("head() and branch('#{branch}')") |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
346 |
else |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
347 |
return log("head()") |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
348 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
349 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
350 |
|
72
3e832d54a4af
Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
71
diff
changeset
|
351 |
# 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
|
352 |
# is active |
3e832d54a4af
Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
71
diff
changeset
|
353 |
def bookmark() |
3e832d54a4af
Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
71
diff
changeset
|
354 |
filename = File.join(@path, '.hg', 'bookmarks.current') |
3e832d54a4af
Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
71
diff
changeset
|
355 |
if File.exist? filename then |
3e832d54a4af
Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
71
diff
changeset
|
356 |
file = File.open(filename, "r") |
3e832d54a4af
Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
71
diff
changeset
|
357 |
begin |
3e832d54a4af
Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
71
diff
changeset
|
358 |
bookmark = file.read.chomp |
3e832d54a4af
Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
71
diff
changeset
|
359 |
ensure |
3e832d54a4af
Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
71
diff
changeset
|
360 |
file.close() |
3e832d54a4af
Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
71
diff
changeset
|
361 |
end |
3e832d54a4af
Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
71
diff
changeset
|
362 |
return bookmark |
3e832d54a4af
Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
71
diff
changeset
|
363 |
else |
3e832d54a4af
Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
71
diff
changeset
|
364 |
return nil |
3e832d54a4af
Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
71
diff
changeset
|
365 |
end |
3e832d54a4af
Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
71
diff
changeset
|
366 |
end |
3e832d54a4af
Added support for checking out a particular revision
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
71
diff
changeset
|
367 |
|
66
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 a hash "bookmark => revision" of all |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
369 |
# bookmarks. |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
370 |
def bookmarks(branch = nil) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
371 |
revset = "bookmark()" |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
372 |
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
|
373 |
bookmarks = {} |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
374 |
self.log(revset, "{bookmarks}|{node|short}\n").each do | line | |
89
3fae142744f4
`hglib.rb`: Fixed `bookmarks()` to support multiple bookmarks on a single changeset
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
86
diff
changeset
|
375 |
bookmarks_per_changeset, changesetid = line.split("|") |
3fae142744f4
`hglib.rb`: Fixed `bookmarks()` to support multiple bookmarks on a single changeset
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
86
diff
changeset
|
376 |
bookmarks_per_changeset.split(' ').each do | bookmark | |
3fae142744f4
`hglib.rb`: Fixed `bookmarks()` to support multiple bookmarks on a single changeset
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
86
diff
changeset
|
377 |
bookmarks[bookmark] = changesetid |
3fae142744f4
`hglib.rb`: Fixed `bookmarks()` to support multiple bookmarks on a single changeset
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
86
diff
changeset
|
378 |
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
|
379 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
380 |
return bookmarks |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
381 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
382 |
|
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
|
383 |
# 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
|
384 |
# 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
|
385 |
protected |
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
386 |
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
|
387 |
authconf = [] |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
388 |
if pass != nil then |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
389 |
if user == nil then |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
390 |
raise Exception.new("Password given but not username! Use user: named param to specify username.") |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
391 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
392 |
# If user/password is provided, make sure we don't have |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
393 |
# username in remote URI. Otherwise Mercurial won't use |
71
68c8cccbdec5
Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
68
diff
changeset
|
394 |
# password from config! |
68c8cccbdec5
Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
68
diff
changeset
|
395 |
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
|
396 |
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
|
397 |
uri = uri.to_s |
68c8cccbdec5
Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
68
diff
changeset
|
398 |
uri_alias = if self.paths.has_key? remote then remote else 'xxx' end |
68c8cccbdec5
Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
68
diff
changeset
|
399 |
authconf << "auth.#{uri_alias}.prefix=#{uri}" |
68c8cccbdec5
Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
68
diff
changeset
|
400 |
authconf << "auth.#{uri_alias}.username=#{user}" |
68c8cccbdec5
Cleanup in `scm.rb`: Unified API of `checkout` and `update` functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
68
diff
changeset
|
401 |
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
|
402 |
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
|
403 |
return authconf |
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
404 |
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
|
405 |
|
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
406 |
public |
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
407 |
|
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
408 |
def incoming(remote = 'default', user: nil, pass: nil, rev: 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
|
409 |
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
|
410 |
case 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
|
411 |
when 0 |
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 |
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
|
413 |
when 1 |
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
414 |
puts "No new changes comming from #{remote}" |
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
415 |
else |
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
416 |
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
|
417 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
418 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
419 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
420 |
|
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
|
421 |
def pull(remote = 'default', user: nil, pass: nil, rev: nil, bookmarks: 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
|
422 |
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
|
423 |
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
|
424 |
case 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
|
425 |
when 0 |
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
426 |
#nothing |
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
427 |
when 1 |
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
428 |
raise Exception.new("Failed to 'pull' from #{remote} (update had unresolved conflicts)") |
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 |
else |
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 |
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
|
431 |
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
|
432 |
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
|
433 |
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
|
434 |
|
79
1058962ee3ef
Added new tasks: `workflow:out-staging` and `workflow:out-upstream`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
78
diff
changeset
|
435 |
def outgoing(remote = 'default', user: nil, pass: nil, rev: 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
|
436 |
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
|
437 |
case 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
|
438 |
when 0 |
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
439 |
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
|
440 |
when 1 |
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
441 |
puts "No new changes going to #{remote}" |
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
442 |
else |
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
443 |
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
|
444 |
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
|
445 |
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
|
446 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
447 |
|
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 |
def push(remote = 'default', user: nil, pass: nil, rev: nil, bookmarks: []) |
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
|
449 |
hg("push", 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
|
450 |
case 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
|
451 |
when 0 |
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
452 |
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
|
453 |
when 1 |
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
454 |
puts "No new changes to push to #{remote}" |
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
455 |
else |
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
456 |
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
|
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 |
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
|
460 |
|
2d09a485772f
Push active bookmark (if any) when running task `workflow:push-staging` or...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
76
diff
changeset
|
461 |
|
66
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
462 |
# 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
|
463 |
# 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
|
464 |
def share(dst, rev = nil) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
465 |
if File.exist? dst then |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
466 |
raise Exception.new("Destination file exists: #{dst}") |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
467 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
468 |
if rev == nil then |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
469 |
rev = log('.')[0] |
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 |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
471 |
if not has_revision?(rev) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
472 |
raise Exception.new("Revision #{rev} does not exist") |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
473 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
474 |
mkdir_p File.dirname(dst); |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
475 |
HG::hg("share", path, dst, config: 'extensions.share=', noupdate: true, bookmarks: false) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
476 |
share = Repository.new(dst) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
477 |
share.update(rev); |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
478 |
return share |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
479 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
480 |
|
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
481 |
# Updates the repository's working copy to given |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
482 |
# 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
|
483 |
# 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
|
484 |
# |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
485 |
# 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
|
486 |
# |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
487 |
# 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
|
488 |
def update(rev = nil) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
489 |
if rev |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
490 |
if not has_revision? rev then |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
491 |
raise Exception.new("Revision #{rev} does not exist") |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
492 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
493 |
hg("update", rev: rev) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
494 |
else |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
495 |
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
|
496 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
497 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
498 |
|
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
499 |
# 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
|
500 |
# 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
|
501 |
def merge(rev) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
502 |
if not has_revision? rev then |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
503 |
raise Exception.new("Revision #{rev} does not exist") |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
504 |
end |
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("merge", rev) do | status | |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
506 |
return status.success? |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
507 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
508 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
509 |
|
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
510 |
def commit(message) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
511 |
user = '' |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
512 |
if not @config['ui'].has_key? 'username' then |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
513 |
user = @config['ui']['username'] |
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 |
hg("commit", message: message, user: user) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
516 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
517 |
|
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
518 |
def has_revision?(rev) |
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
|
519 |
revs = log(rev) |
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
|
520 |
return 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
|
521 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
522 |
|
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
523 |
# 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
|
524 |
# 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
|
525 |
# `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
|
526 |
def self.lookup(directory) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
527 |
return nil if not File.exist?(directory) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
528 |
repo_dir = directory |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
529 |
while repo_dir != nil |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
530 |
if HG::repository? repo_dir |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
531 |
return Repository.new(repo_dir) |
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 |
repo_dir_parent = File.dirname(repo_dir) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
534 |
if repo_dir_parent == repo_dir |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
535 |
repo_dir = nil |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
536 |
else |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
537 |
repo_dir = repo_dir_parent |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
538 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
539 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
540 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
541 |
|
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
542 |
# 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
|
543 |
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
|
544 |
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
|
545 |
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
|
546 |
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
|
547 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
548 |
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
|
549 |
|
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
550 |
# 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
|
551 |
# 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
|
552 |
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
|
553 |
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
|
554 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
555 |
|
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
556 |
# Enumerate all repositories 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
|
557 |
def self.forest(directory, &block) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
558 |
if 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
|
559 |
yield 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
|
560 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
561 |
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
|
562 |
path = File.join(directory, x) |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
563 |
if 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
|
564 |
if x == "." or x == ".." or x == ".svn" or x == '.git' |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
565 |
next |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
566 |
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
|
567 |
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
|
568 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
569 |
end |
8d2d5dfe94d0
Refactored SCM support to use `hglib.rb` for performing Mercurial related tasks
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
570 |
end |
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 # module HG |