svnauto 1.0.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/bin/sc +2 -10
- data/{lib/sc/constants.rb → bin/sva} +8 -13
- data/lib/{sc.rb → svnauto.rb} +13 -9
- data/lib/{sc → svnauto}/command.rb +8 -3
- data/lib/{sc → svnauto}/commands/bug.rb +5 -2
- data/lib/{sc → svnauto}/commands/checkout.rb +3 -1
- data/lib/{sc → svnauto}/commands/config.rb +18 -2
- data/lib/{sc → svnauto}/commands/create.rb +2 -1
- data/lib/{sc → svnauto}/commands/experimental.rb +19 -5
- data/lib/svnauto/commands/externals.rb +128 -0
- data/lib/{sc → svnauto}/commands/info.rb +1 -1
- data/lib/{sc → svnauto}/commands/list.rb +3 -1
- data/lib/{sc → svnauto}/commands/release.rb +39 -7
- data/lib/{sc → svnauto}/config_file.rb +3 -3
- data/lib/{sc/path.rb → svnauto/constants.rb} +24 -18
- data/lib/{sc → svnauto}/dispatcher.rb +11 -4
- data/lib/svnauto/path.rb +138 -0
- data/lib/{sc → svnauto}/project.rb +16 -11
- data/lib/{sc → svnauto}/repository.rb +2 -2
- data/lib/{sc → svnauto}/svn.rb +51 -10
- data/lib/svnauto/svn_externals.rb +187 -0
- data/lib/svnauto/svn_info.rb +96 -0
- data/lib/{sc → svnauto}/version.rb +2 -2
- data/test/setup.rb +24 -28
- data/test/test_bug.rb +10 -10
- data/test/test_checkout.rb +3 -3
- data/test/test_create.rb +3 -3
- data/test/test_experimental.rb +33 -18
- data/test/test_externals.rb +55 -0
- data/test/test_path.rb +148 -0
- data/test/test_release.rb +11 -11
- data/test/test_svninfo.rb +17 -0
- data/test/test_version.rb +16 -16
- metadata +35 -42
- data/INSTALL +0 -48
- data/LICENSE +0 -22
- data/README +0 -81
- data/THANKS +0 -8
- data/TODO +0 -8
- data/doc/manual.txt +0 -241
data/bin/sc
CHANGED
@@ -23,13 +23,5 @@
|
|
23
23
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
24
24
|
#
|
25
25
|
################################################################################
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
begin
|
30
|
-
SC::Dispatcher.new.run
|
31
|
-
rescue RuntimeError => e
|
32
|
-
$stderr.puts "#{SC::Constants::TERMINAL.color(SC::Constants::ME, :red)}: #{e}"
|
33
|
-
exit 1
|
34
|
-
end
|
35
|
-
################################################################################
|
26
|
+
puts "The 'sc' command has been renamed to 'sva', please use 'sva' instead."
|
27
|
+
exit 1
|
@@ -1,3 +1,4 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
1
2
|
################################################################################
|
2
3
|
#
|
3
4
|
# Copyright (C) 2006 Peter J Jones (pjones@pmade.com)
|
@@ -22,19 +23,13 @@
|
|
22
23
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
23
24
|
#
|
24
25
|
################################################################################
|
25
|
-
|
26
|
-
|
27
|
-
################################################################################
|
28
|
-
# The version number for this copy of SC
|
29
|
-
VERSION = '1.0.2'
|
26
|
+
require 'rubygems'
|
27
|
+
require 'svnauto'
|
30
28
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
TERMINAL = HighLine.new
|
37
|
-
|
38
|
-
end
|
29
|
+
begin
|
30
|
+
SvnAuto::Dispatcher.new.run
|
31
|
+
rescue RuntimeError => e
|
32
|
+
$stderr.puts "#{SvnAuto::Constants::TERMINAL.color(SvnAuto::Constants::ME, :red)}: #{e}"
|
33
|
+
exit 1
|
39
34
|
end
|
40
35
|
################################################################################
|
data/lib/{sc.rb → svnauto.rb}
RENAMED
@@ -25,15 +25,19 @@
|
|
25
25
|
require 'rubygems'
|
26
26
|
require 'highline'
|
27
27
|
require 'uri'
|
28
|
+
require 'set'
|
28
29
|
require 'pathname'
|
30
|
+
require 'tempfile'
|
29
31
|
################################################################################
|
30
|
-
require '
|
31
|
-
require '
|
32
|
-
require '
|
33
|
-
require '
|
34
|
-
require '
|
35
|
-
require '
|
36
|
-
require '
|
37
|
-
require '
|
38
|
-
require '
|
32
|
+
require 'svnauto/constants'
|
33
|
+
require 'svnauto/version'
|
34
|
+
require 'svnauto/config_file'
|
35
|
+
require 'svnauto/svn'
|
36
|
+
require 'svnauto/svn_info'
|
37
|
+
require 'svnauto/svn_externals'
|
38
|
+
require 'svnauto/path'
|
39
|
+
require 'svnauto/project'
|
40
|
+
require 'svnauto/repository'
|
41
|
+
require 'svnauto/command'
|
42
|
+
require 'svnauto/dispatcher'
|
39
43
|
################################################################################
|
@@ -25,13 +25,14 @@
|
|
25
25
|
require 'optparse'
|
26
26
|
require 'set'
|
27
27
|
################################################################################
|
28
|
-
module
|
28
|
+
module SvnAuto
|
29
29
|
################################################################################
|
30
30
|
class Command
|
31
31
|
################################################################################
|
32
32
|
VALID_SET_KEYS = Set.new([
|
33
33
|
:name,
|
34
34
|
:description,
|
35
|
+
:example,
|
35
36
|
:without_project,
|
36
37
|
:without_repository,
|
37
38
|
:usage,
|
@@ -104,7 +105,11 @@ module SC
|
|
104
105
|
raise "invalid set key #{name}, wanted one of #{VALID_SET_KEYS.join(', ')}"
|
105
106
|
end
|
106
107
|
|
107
|
-
|
108
|
+
if name == :example
|
109
|
+
instance_eval { (@attributes[name] ||= []) << value }
|
110
|
+
else
|
111
|
+
instance_eval { @attributes[name] = value }
|
112
|
+
end
|
108
113
|
end
|
109
114
|
|
110
115
|
################################################################################
|
@@ -120,5 +125,5 @@ end
|
|
120
125
|
# load all commands
|
121
126
|
Dir.foreach(File.join(File.dirname(__FILE__), 'commands')) do |file|
|
122
127
|
next unless file.match(/\.rb$/)
|
123
|
-
require '
|
128
|
+
require 'svnauto/commands/' + file
|
124
129
|
end
|
@@ -22,7 +22,7 @@
|
|
22
22
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
23
23
|
#
|
24
24
|
################################################################################
|
25
|
-
module
|
25
|
+
module SvnAuto
|
26
26
|
################################################################################
|
27
27
|
class Bug < Command
|
28
28
|
################################################################################
|
@@ -34,6 +34,9 @@ module SC
|
|
34
34
|
set(:usage, "[options] unique-bug-id")
|
35
35
|
set(:args_min, 1)
|
36
36
|
set(:args_max, 1)
|
37
|
+
set(:example, "12 # create bug fix branch for bug ID 12")
|
38
|
+
set(:example, "--close 12 # close and merge changes")
|
39
|
+
set(:example, "--diff 12 # show diff for changes in bug 12")
|
37
40
|
|
38
41
|
option('-r', '--release VER', "Create branch off VER rel branch instead of latest rel") do |val, opthash|
|
39
42
|
opthash[:release] = val
|
@@ -103,7 +106,7 @@ module SC
|
|
103
106
|
|
104
107
|
# record the release branch so we can get back to it later
|
105
108
|
Svn.propset(REL_BRN_PROP, @version.to_s, dir) {|line|}
|
106
|
-
Svn.commit('-m', "
|
109
|
+
Svn.commit('-m', "#{Constants::ME}: recording release branch for bug fix #@bug_id", dir)
|
107
110
|
|
108
111
|
Constants::TERMINAL.say("Created bug fix branch and checked out to: " +
|
109
112
|
Constants::TERMINAL.color(Path.relative_to_home(dir), :green))
|
@@ -22,13 +22,15 @@
|
|
22
22
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
23
23
|
#
|
24
24
|
################################################################################
|
25
|
-
module
|
25
|
+
module SvnAuto
|
26
26
|
################################################################################
|
27
27
|
class Checkout < Command
|
28
28
|
################################################################################
|
29
29
|
set(:name, [:checkout, :co])
|
30
30
|
set(:description, "Checkout a project from the repository")
|
31
31
|
set(:args_max, 0)
|
32
|
+
set(:example, "# check out the trunk")
|
33
|
+
set(:example, "--bug 12 # check out bug fix branch for bug ID 12")
|
32
34
|
|
33
35
|
option('-r', '--release VER', 'Checkout a release instead of the trunk') do |val, opts|
|
34
36
|
opts[:co_release] = Version.new(val)
|
@@ -22,12 +22,12 @@
|
|
22
22
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
23
23
|
#
|
24
24
|
################################################################################
|
25
|
-
module
|
25
|
+
module SvnAuto
|
26
26
|
################################################################################
|
27
27
|
class Config < Command
|
28
28
|
################################################################################
|
29
29
|
set(:name, :config)
|
30
|
-
set(:description, "Manage
|
30
|
+
set(:description, "Manage the sva configuration file")
|
31
31
|
set(:args_max, 0)
|
32
32
|
set(:without_repository)
|
33
33
|
set(:without_project)
|
@@ -53,6 +53,22 @@ module SC
|
|
53
53
|
config.save
|
54
54
|
end
|
55
55
|
|
56
|
+
################################################################################
|
57
|
+
option('--update', 'Update the config file for this version of sva') do |val, hash|
|
58
|
+
old_name = File.join(ENV['HOME'], '.sc')
|
59
|
+
|
60
|
+
if File.exist?(old_name)
|
61
|
+
File.open(old_name) do |old_file|
|
62
|
+
File.open(ConfigFile::FILENAME, 'w') do |new_file|
|
63
|
+
old_file.each_line {|l| new_file << l.gsub(/SC::/, 'SvnAuto::')}
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
FileUtils::rm(old_name)
|
68
|
+
puts "#{Constants::ME}: moved sc config file to sva location"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
56
72
|
end
|
57
73
|
################################################################################
|
58
74
|
end
|
@@ -22,7 +22,7 @@
|
|
22
22
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
23
23
|
#
|
24
24
|
################################################################################
|
25
|
-
module
|
25
|
+
module SvnAuto
|
26
26
|
################################################################################
|
27
27
|
class Create < Command
|
28
28
|
################################################################################
|
@@ -32,6 +32,7 @@ module SC
|
|
32
32
|
set(:usage, "[options] project-name")
|
33
33
|
set(:args_min, 1)
|
34
34
|
set(:args_max, 1)
|
35
|
+
set(:example, "hello-world # create a new project called hello-world")
|
35
36
|
|
36
37
|
option('-C', '--no-checkout', "Don't checkout the new project") do |val, opthash|
|
37
38
|
opthash[:no_checkout] = true
|
@@ -22,7 +22,7 @@
|
|
22
22
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
23
23
|
#
|
24
24
|
################################################################################
|
25
|
-
module
|
25
|
+
module SvnAuto
|
26
26
|
################################################################################
|
27
27
|
class Experimental < Command
|
28
28
|
################################################################################
|
@@ -31,6 +31,13 @@ module SC
|
|
31
31
|
set(:usage, "[options] branch-name")
|
32
32
|
set(:args_min, 1)
|
33
33
|
set(:args_max, 1)
|
34
|
+
set(:example, "crazy # create an experimental branch called crazy")
|
35
|
+
set(:example, "--up crazy # merge the trunk onto crazy")
|
36
|
+
set(:example, "--down crazy # merge crazy to the trunk")
|
37
|
+
|
38
|
+
option('-r', '--revision REV', 'Branch at REV instead of trunk/HEAD') do |val, opts|
|
39
|
+
opts[:revision] = val
|
40
|
+
end
|
34
41
|
|
35
42
|
option('-p', '--prefix PATH', 'Use branch prefix PATH instead of exp') do |val, opts|
|
36
43
|
opts[:prefix] = val
|
@@ -88,12 +95,19 @@ module SC
|
|
88
95
|
name = @branch_name
|
89
96
|
name = @path if @prefix != 'exp'
|
90
97
|
|
91
|
-
|
92
|
-
|
93
|
-
|
98
|
+
question = "Create experimental branch "
|
99
|
+
question << Constants::TERMINAL.color(name, :green) + " off "
|
100
|
+
question << Constants::TERMINAL.color(@project.to_s, :green) + "/trunk"
|
101
|
+
question << Constants::TERMINAL.color(":#{opthash[:revision]}", :red) if opthash[:revision]
|
102
|
+
question << "? "
|
103
|
+
|
104
|
+
exit unless Constants::TERMINAL.agree(question)
|
94
105
|
end
|
95
106
|
|
96
|
-
|
107
|
+
branch_options = {}
|
108
|
+
branch_options[:revision] = opthash[:revision] if opthash[:revision]
|
109
|
+
|
110
|
+
Svn.branch(@project, @project.trunk, @project.branches(@path), branch_options)
|
97
111
|
Svn.branch(@project, @project.branches(@path), @project.tags("#{@prefix}/PRE-#{@branch_name}"))
|
98
112
|
|
99
113
|
unless opthash[:no_checkout]
|
@@ -0,0 +1,128 @@
|
|
1
|
+
################################################################################
|
2
|
+
#
|
3
|
+
# Copyright (C) 2006 Peter J Jones (pjones@pmade.com)
|
4
|
+
#
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
# a copy of this software and associated documentation files (the
|
7
|
+
# "Software"), to deal in the Software without restriction, including
|
8
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
# the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be
|
14
|
+
# included in all copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
23
|
+
#
|
24
|
+
################################################################################
|
25
|
+
module SvnAuto
|
26
|
+
################################################################################
|
27
|
+
class Externals < Command
|
28
|
+
################################################################################
|
29
|
+
set(:name, :externals)
|
30
|
+
set(:description, "Lock/Unlock svn:externals at specific revisions")
|
31
|
+
set(:usage, "[options] [directory ...]")
|
32
|
+
set(:without_repository)
|
33
|
+
set(:without_project)
|
34
|
+
set(:example, "--lock --revision 1218 vendor/rails")
|
35
|
+
set(:example, "--unlock vendor/rails")
|
36
|
+
set(:example, "--info vendor/rails")
|
37
|
+
|
38
|
+
option('-r', '--revision REV', "Lock at REV instead of the current one") do |val, opthash|
|
39
|
+
raise "invalid format for revision: #{val}" unless val.match(/^\d+$/)
|
40
|
+
opthash[:revision] = val
|
41
|
+
end
|
42
|
+
|
43
|
+
option('-N', '--non-recursive', "Don't recurse into given directories") do |val, opthash|
|
44
|
+
opthash[:nonrecursive] = true
|
45
|
+
end
|
46
|
+
|
47
|
+
option('-l', '--lock', "Lock an external at a specific revision") do |val, opthash|
|
48
|
+
opthash[:lock] = true
|
49
|
+
end
|
50
|
+
|
51
|
+
option('-u', '--unlock', "Unlock externals so they track commits again") do |val, opthash|
|
52
|
+
opthash[:unlock] = true
|
53
|
+
end
|
54
|
+
|
55
|
+
option('-i', '--info', "Get info about locked/unlocked externals") do |val, opthash|
|
56
|
+
opthash[:info] = true
|
57
|
+
end
|
58
|
+
|
59
|
+
################################################################################
|
60
|
+
def run (project, args)
|
61
|
+
@externals = SvnExternals.new(args, !opthash[:nonrecursive])
|
62
|
+
|
63
|
+
if opthash[:info]
|
64
|
+
info
|
65
|
+
elsif opthash[:lock] or opthash[:unlock]
|
66
|
+
if opthash[:lock] and opthash[:unlock]
|
67
|
+
raise "--lock and --unlock are mutually exclusive, you may only use one at a time"
|
68
|
+
end
|
69
|
+
|
70
|
+
uncommitted_check
|
71
|
+
lock if opthash[:lock]
|
72
|
+
unlock if opthash[:unlock]
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
################################################################################
|
77
|
+
def info
|
78
|
+
show_info_for(:locked)
|
79
|
+
show_info_for(:unlocked)
|
80
|
+
end
|
81
|
+
|
82
|
+
################################################################################
|
83
|
+
def lock
|
84
|
+
locking = @externals.unlocked.dup
|
85
|
+
@externals.lock
|
86
|
+
show_info_for(:locked, locking)
|
87
|
+
end
|
88
|
+
|
89
|
+
################################################################################
|
90
|
+
def unlock
|
91
|
+
unlocking = @externals.locked.dup
|
92
|
+
@externals.unlock
|
93
|
+
show_info_for(:unlocked, unlocking)
|
94
|
+
end
|
95
|
+
|
96
|
+
################################################################################
|
97
|
+
def show_info_for (state, collection=nil)
|
98
|
+
title = 'unlocked'
|
99
|
+
color = :green
|
100
|
+
|
101
|
+
if state == :locked
|
102
|
+
title = ' locked'
|
103
|
+
color = :red
|
104
|
+
end
|
105
|
+
|
106
|
+
collection ||= @externals.send(state)
|
107
|
+
collection.each do |external|
|
108
|
+
status = Constants::TERMINAL.color(title, color) + ' '
|
109
|
+
status << Constants::TERMINAL.color(external.revision.rjust(6), :red) + ' '
|
110
|
+
status << Constants::TERMINAL.color(external.path, :green) + ' '
|
111
|
+
status << Constants::TERMINAL.color(external.url, :cyan)
|
112
|
+
Constants::TERMINAL.say(status)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
################################################################################
|
117
|
+
# make sure we can't run if there are uncomitted changes
|
118
|
+
def uncommitted_check
|
119
|
+
Svn.status do |line|
|
120
|
+
next if line.match(/^\s*X/) or line.match(/^\s*$/)
|
121
|
+
next if line.match(/^\s*Performing/)
|
122
|
+
raise "you have uncommitted changes, you must commit first: #{line}"
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
end
|
127
|
+
end
|
128
|
+
################################################################################
|
@@ -22,7 +22,7 @@
|
|
22
22
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
23
23
|
#
|
24
24
|
################################################################################
|
25
|
-
module
|
25
|
+
module SvnAuto
|
26
26
|
################################################################################
|
27
27
|
class Info < Command
|
28
28
|
set(:name, :info)
|
@@ -22,13 +22,15 @@
|
|
22
22
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
23
23
|
#
|
24
24
|
################################################################################
|
25
|
-
module
|
25
|
+
module SvnAuto
|
26
26
|
################################################################################
|
27
27
|
class List < Command
|
28
28
|
################################################################################
|
29
29
|
set(:name, [:list, :ls])
|
30
30
|
set(:description, "List directory contents, projects, releases, etc.")
|
31
31
|
set(:without_project)
|
32
|
+
set(:example, "# list projects")
|
33
|
+
set(:example, "hello-world/trunk # list the contents of the hello-world trunk")
|
32
34
|
|
33
35
|
################################################################################
|
34
36
|
def run (project, args)
|
@@ -22,7 +22,7 @@
|
|
22
22
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
23
23
|
#
|
24
24
|
################################################################################
|
25
|
-
module
|
25
|
+
module SvnAuto
|
26
26
|
################################################################################
|
27
27
|
class Release < Command
|
28
28
|
set(:name, :release)
|
@@ -30,11 +30,21 @@ module SC
|
|
30
30
|
set(:usage, "[options] major.minor[.macro]")
|
31
31
|
set(:args_min, 1)
|
32
32
|
set(:args_max, 1)
|
33
|
+
set(:example, "1.0 # create a release branch")
|
34
|
+
set(:example, "1.0.0 # create a branch if necessary, and tag it")
|
35
|
+
|
36
|
+
option('-r', '--revision REV', 'Branch at REV instead of trunk/HEAD') do |val, opts|
|
37
|
+
opts[:revision] = val
|
38
|
+
end
|
33
39
|
|
34
40
|
option('-C', '--no-checkout', "Don't checkout the rel branch") do |val, opts|
|
35
41
|
opts[:no_checkout] = true
|
36
42
|
end
|
37
43
|
|
44
|
+
option('-l', '--lock-all', "Lock all svn:externals after release") do |val, opts|
|
45
|
+
opts[:lock_all] = true
|
46
|
+
end
|
47
|
+
|
38
48
|
################################################################################
|
39
49
|
def run (project, args)
|
40
50
|
@version = Version.new(args.first)
|
@@ -50,13 +60,23 @@ module SC
|
|
50
60
|
|
51
61
|
################################################################################
|
52
62
|
def make_release_branch
|
63
|
+
if opthash[:no_checkout] and opthash[:lock_all]
|
64
|
+
raise "you can't use --lock-all with --no-checkout"
|
65
|
+
end
|
66
|
+
|
53
67
|
unless opthash[:force]
|
54
|
-
question
|
55
|
-
question << " release branch " + Constants::TERMINAL.color(@version.major_minor, :red)
|
68
|
+
question = "Create " + Constants::TERMINAL.color(@project.to_s, :green)
|
69
|
+
question << " release branch " + Constants::TERMINAL.color(@version.major_minor, :red)
|
70
|
+
question << " off the trunk"
|
71
|
+
question << " at revision #{opthash[:revision]}" if opthash[:revision]
|
72
|
+
question << "? "
|
73
|
+
|
56
74
|
exit unless Constants::TERMINAL.agree(question)
|
57
75
|
end
|
58
76
|
|
59
|
-
|
77
|
+
branch_options = {}
|
78
|
+
branch_options[:revision] = opthash[:revision] if opthash[:revision]
|
79
|
+
Svn.branch(@project, @project.trunk, @project.branches("rel/#{@version.major_minor}"), branch_options)
|
60
80
|
|
61
81
|
if @version.macro.nil?
|
62
82
|
question = "Tag release branch as "
|
@@ -70,9 +90,21 @@ module SC
|
|
70
90
|
tag_release_branch unless @version.macro.nil?
|
71
91
|
|
72
92
|
unless opthash[:no_checkout]
|
73
|
-
|
74
|
-
|
75
|
-
|
93
|
+
checkout_location = @project.checkout(@project.branches("rel/#{@version.major_minor}"))
|
94
|
+
from_home = Path.relative_to_home(checkout_location)
|
95
|
+
Constants::TERMINAL.say("Checked out to: " + Constants::TERMINAL.color(from_home, :green))
|
96
|
+
|
97
|
+
if opthash[:lock_all]
|
98
|
+
Dir.chdir(checkout_location) do
|
99
|
+
externals = SvnExternals.new
|
100
|
+
locked = externals.unlocked.size
|
101
|
+
externals.lock
|
102
|
+
|
103
|
+
message = "Locked " + Constants::TERMINAL.color(locked.to_s, :red)
|
104
|
+
message += locked == 1 ? "external" : "externals"
|
105
|
+
Constants::TERMINAL.say(message)
|
106
|
+
end
|
107
|
+
end
|
76
108
|
end
|
77
109
|
end
|
78
110
|
|