realityforge-braid 0.7.2 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +3 -0
- data/.ruby-version +1 -0
- data/README.md +2 -2
- data/Rakefile +4 -15
- data/bin/braid +4 -15
- data/braid.gemspec +2 -2
- data/lib/braid/command.rb +4 -28
- data/lib/braid/commands/add.rb +2 -2
- data/lib/braid/commands/setup.rb +2 -6
- data/lib/braid/config.rb +1 -8
- data/lib/braid/mirror.rb +5 -43
- data/lib/braid/operations.rb +4 -61
- data/lib/braid/version.rb +1 -1
- data/lib/braid.rb +8 -6
- data/{test/config_test.rb → spec/config_spec.rb} +14 -17
- data/{test → spec}/fixtures/shiny/README +0 -0
- data/{test → spec}/fixtures/skit1/layouts/layout.liquid +0 -0
- data/{test → spec}/fixtures/skit1/preview.png +0 -0
- data/{test → spec}/fixtures/skit1.1/layouts/layout.liquid +0 -0
- data/{test → spec}/fixtures/skit1.2/layouts/layout.liquid +0 -0
- data/spec/integration/adding_spec.rb +43 -0
- data/{test/integration/updating_test.rb → spec/integration/updating_spec.rb} +2 -41
- data/{test → spec}/integration_helper.rb +3 -26
- data/{test/mirror_test.rb → spec/mirror_spec.rb} +3 -32
- data/{test/operations_test.rb → spec/operations_spec.rb} +1 -1
- data/{test → spec}/test_helper.rb +2 -2
- metadata +100 -88
- data/lib/core_ext.rb +0 -13
- data/test/braid_test.rb +0 -7
- data/test/integration/adding_test.rb +0 -80
data/.gitignore
CHANGED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.8.7-p371
|
data/README.md
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
# Braid
|
2
2
|
|
3
|
-
Braid is a simple tool to help track git
|
3
|
+
Braid is a simple tool to help track git vendor branches in a git repository.
|
4
4
|
|
5
5
|
The project homepage is [here](http://github.com/evilchelu/braid/wikis/home).
|
6
6
|
|
7
7
|
## Requirements
|
8
8
|
|
9
|
-
* git 1.6+
|
9
|
+
* git 1.6+
|
10
10
|
* main >= 4.2.0
|
11
11
|
* open4 >= 1.0.1 (unless using jruby)
|
12
12
|
|
data/Rakefile
CHANGED
@@ -2,19 +2,8 @@ require 'bundler'
|
|
2
2
|
Bundler::GemHelper.install_tasks
|
3
3
|
|
4
4
|
require 'rake'
|
5
|
-
require '
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
def test_task(name, pattern)
|
10
|
-
Rake::TestTask.new(name) do |t|
|
11
|
-
ENV['TESTOPTS'] = '--runner=s'
|
12
|
-
|
13
|
-
t.libs << 'lib'
|
14
|
-
t.pattern = pattern
|
15
|
-
t.verbose = true
|
16
|
-
end
|
5
|
+
require 'rspec/core/rake_task'
|
6
|
+
desc 'Run all specs'
|
7
|
+
RSpec::Core::RakeTask.new :spec do |task|
|
8
|
+
task.rspec_opts = %w{--backtrace}
|
17
9
|
end
|
18
|
-
|
19
|
-
test_task(:test, "test/*_test.rb")
|
20
|
-
namespace(:test) { test_task(:integration, "test/integration/*_test.rb") }
|
data/bin/braid
CHANGED
@@ -12,7 +12,7 @@ Home = File.expand_path(ENV['HOME'] || '~')
|
|
12
12
|
# main kicks ass!
|
13
13
|
Main {
|
14
14
|
description <<-TXT
|
15
|
-
braid is a simple tool to help track git
|
15
|
+
braid is a simple tool to help track git repositories inside a git repository.
|
16
16
|
|
17
17
|
Run 'braid commandname help' for more details.
|
18
18
|
|
@@ -25,16 +25,9 @@ Main {
|
|
25
25
|
Add a new mirror to be tracked.
|
26
26
|
|
27
27
|
* adds metadata about the mirror to .braids
|
28
|
-
* adds the git
|
28
|
+
* adds the git remotes to .git/config
|
29
29
|
* fetches and merges remote code into given directory
|
30
30
|
|
31
|
-
--type defaults:
|
32
|
-
|
33
|
-
* svn://path # => svn
|
34
|
-
* git://path # => git
|
35
|
-
* http://path/trunk # => svn
|
36
|
-
* http://path.git # => git
|
37
|
-
|
38
31
|
Name defaults:
|
39
32
|
|
40
33
|
* remote/path # => path
|
@@ -43,12 +36,8 @@ Main {
|
|
43
36
|
TXT
|
44
37
|
|
45
38
|
examples <<-TXT
|
46
|
-
. braid add svn://remote/path
|
47
|
-
. braid add svn://remote/path local/dir
|
48
|
-
. braid add git://remote/path local/dir
|
49
39
|
. braid add http://remote/path.git local/dir
|
50
|
-
. braid add http://remote/path
|
51
|
-
. braid add svn://remote/path --branch notmaster
|
40
|
+
. braid add http://remote/path local/dir
|
52
41
|
TXT
|
53
42
|
|
54
43
|
mixin :argument_url, :option_type, :optional_path, :option_branch, :option_rails_plugin, :option_revision, :option_full, :option_verbose
|
@@ -134,7 +123,7 @@ Main {
|
|
134
123
|
|
135
124
|
mode(:setup) {
|
136
125
|
description <<-TXT
|
137
|
-
Set up git
|
126
|
+
Set up git remotes.
|
138
127
|
TXT
|
139
128
|
|
140
129
|
mixin :optional_path, :option_verbose, :option_force
|
data/braid.gemspec
CHANGED
@@ -17,7 +17,7 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.rubyforge_project = %q{braid}
|
18
18
|
|
19
19
|
s.files = `git ls-files`.split("\n")
|
20
|
-
s.test_files = `git ls-files -- {
|
20
|
+
s.test_files = `git ls-files -- {spec}/*`.split("\n")
|
21
21
|
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
22
22
|
s.default_executable = %q{braid}
|
23
23
|
s.require_paths = ["lib"]
|
@@ -28,6 +28,6 @@ Gem::Specification.new do |s|
|
|
28
28
|
s.add_dependency(%q<main>, [">= 4.7.3"])
|
29
29
|
s.add_dependency(%q<open4>, [">= 1.0.1"]) unless defined?(JRUBY_VERSION)
|
30
30
|
|
31
|
-
s.add_development_dependency(%q<
|
31
|
+
s.add_development_dependency(%q<rspec>, ["= 2.12.0"])
|
32
32
|
s.add_development_dependency(%q<mocha>, [">= 0.9.11"])
|
33
33
|
end
|
data/lib/braid/command.rb
CHANGED
@@ -89,48 +89,24 @@ module Braid
|
|
89
89
|
|
90
90
|
def display_revision(mirror, revision = nil)
|
91
91
|
revision ||= mirror.revision
|
92
|
-
|
92
|
+
"'#{revision[0, 7]}'"
|
93
93
|
end
|
94
94
|
|
95
95
|
def validate_new_revision(mirror, new_revision)
|
96
|
-
unless new_revision
|
97
|
-
unless mirror.type == "svn"
|
98
|
-
return git.rev_parse(mirror.remote)
|
99
|
-
else
|
100
|
-
return svn.head_revision(mirror.url)
|
101
|
-
end
|
102
|
-
end
|
96
|
+
return git.rev_parse(mirror.remote) unless new_revision
|
103
97
|
|
104
|
-
|
105
|
-
new_revision = git.rev_parse(new_revision)
|
106
|
-
else
|
107
|
-
new_revision = svn.clean_revision(new_revision)
|
108
|
-
end
|
98
|
+
new_revision = git.rev_parse(new_revision)
|
109
99
|
old_revision = mirror.revision
|
110
100
|
|
111
101
|
if new_revision == old_revision
|
112
102
|
raise InvalidRevision, "mirror is already at requested revision"
|
113
103
|
end
|
114
104
|
|
115
|
-
if mirror.type == "svn"
|
116
|
-
if old_revision && new_revision < old_revision
|
117
|
-
raise InvalidRevision, "local revision is higher than request revision"
|
118
|
-
end
|
119
|
-
|
120
|
-
if svn.head_revision(mirror.url) < new_revision
|
121
|
-
raise InvalidRevision, "requested revision is higher than remote revision"
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
105
|
new_revision
|
126
106
|
end
|
127
107
|
|
128
108
|
def determine_target_revision(mirror, new_revision)
|
129
|
-
|
130
|
-
git.rev_parse(new_revision)
|
131
|
-
else
|
132
|
-
git_svn.commit_hash(mirror.remote, new_revision)
|
133
|
-
end
|
109
|
+
git.rev_parse(new_revision)
|
134
110
|
end
|
135
111
|
end
|
136
112
|
end
|
data/lib/braid/commands/add.rb
CHANGED
@@ -7,9 +7,9 @@ module Braid
|
|
7
7
|
with_reset_on_error do
|
8
8
|
mirror = config.add_from_options(url, options)
|
9
9
|
|
10
|
-
branch_message = (mirror.
|
10
|
+
branch_message = (mirror.branch == "master") ? "" : " branch '#{mirror.branch}'"
|
11
11
|
revision_message = options["revision"] ? " at #{display_revision(mirror, options["revision"])}" : ""
|
12
|
-
msg "Adding
|
12
|
+
msg "Adding mirror of '#{mirror.url}'#{branch_message}#{revision_message}."
|
13
13
|
|
14
14
|
# these commands are explained in the subtree merge guide
|
15
15
|
# http://www.kernel.org/pub/software/scm/git/docs/howto/using-merge-subtree.html
|
data/lib/braid/commands/setup.rb
CHANGED
@@ -28,12 +28,8 @@ module Braid
|
|
28
28
|
end
|
29
29
|
|
30
30
|
msg "Setup: Creating remote for '#{mirror.path}'."
|
31
|
-
|
32
|
-
|
33
|
-
git.remote_add(mirror.remote, url, mirror.branch)
|
34
|
-
else
|
35
|
-
git_svn.init(mirror.remote, mirror.url)
|
36
|
-
end
|
31
|
+
url = use_local_cache? ? git_cache.path(mirror.url) : mirror.url
|
32
|
+
git.remote_add(mirror.remote, url, mirror.branch)
|
37
33
|
end
|
38
34
|
end
|
39
35
|
end
|
data/lib/braid/config.rb
CHANGED
@@ -1,9 +1,4 @@
|
|
1
1
|
require 'yaml'
|
2
|
-
|
3
|
-
# psych throws such wonderful errors as:
|
4
|
-
# `@vendor/rails' is not allowed as an instance variable name (NameError)
|
5
|
-
YAML::ENGINE.yamler = 'syck' if RUBY_VERSION >= '1.9.1'
|
6
|
-
|
7
2
|
require 'yaml/store'
|
8
3
|
|
9
4
|
module Braid
|
@@ -73,9 +68,7 @@ module Braid
|
|
73
68
|
|
74
69
|
def valid?
|
75
70
|
@db.transaction(true) do
|
76
|
-
!@db.roots.any?
|
77
|
-
@db[path]["url"].nil?
|
78
|
-
end
|
71
|
+
!@db.roots.any? {|path| @db[path]["url"].nil?}
|
79
72
|
end
|
80
73
|
end
|
81
74
|
|
data/lib/braid/mirror.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
module Braid
|
2
2
|
class Mirror
|
3
|
-
TYPES = %w(git svn)
|
4
3
|
ATTRIBUTES = %w(url remote type branch squashed revision lock)
|
5
4
|
|
6
5
|
class UnknownType < BraidError
|
@@ -8,11 +7,6 @@ module Braid
|
|
8
7
|
"unknown type: #{super}"
|
9
8
|
end
|
10
9
|
end
|
11
|
-
class CannotGuessType < BraidError
|
12
|
-
def message
|
13
|
-
"cannot guess type: #{super}"
|
14
|
-
end
|
15
|
-
end
|
16
10
|
class PathRequired < BraidError
|
17
11
|
def message
|
18
12
|
"path is required"
|
@@ -33,12 +27,6 @@ module Braid
|
|
33
27
|
|
34
28
|
branch = options["branch"] || "master"
|
35
29
|
|
36
|
-
if type = options["type"] || extract_type_from_url(url)
|
37
|
-
raise UnknownType, type unless TYPES.include?(type)
|
38
|
-
else
|
39
|
-
raise CannotGuessType, url
|
40
|
-
end
|
41
|
-
|
42
30
|
unless path = options["path"] || extract_path_from_url(url)
|
43
31
|
raise PathRequired
|
44
32
|
end
|
@@ -47,11 +35,10 @@ module Braid
|
|
47
35
|
path = "vendor/plugins/#{path}"
|
48
36
|
end
|
49
37
|
|
50
|
-
remote = "#{branch}/braid/#{path}"
|
38
|
+
remote = "#{branch}/braid/#{path}"
|
51
39
|
squashed = !options["full"]
|
52
|
-
branch = nil if type == "svn"
|
53
40
|
|
54
|
-
attributes = {"url" => url, "remote" => remote, "
|
41
|
+
attributes = {"url" => url, "remote" => remote, "branch" => branch, "squashed" => squashed}
|
55
42
|
self.new(path, attributes)
|
56
43
|
end
|
57
44
|
|
@@ -59,11 +46,6 @@ module Braid
|
|
59
46
|
path == comparison.path && attributes == comparison.attributes
|
60
47
|
end
|
61
48
|
|
62
|
-
def type
|
63
|
-
# override Object#type
|
64
|
-
attributes["type"]
|
65
|
-
end
|
66
|
-
|
67
49
|
def locked?
|
68
50
|
!!lock
|
69
51
|
end
|
@@ -90,12 +72,8 @@ module Braid
|
|
90
72
|
end
|
91
73
|
|
92
74
|
def fetch
|
93
|
-
|
94
|
-
|
95
|
-
git.fetch(remote)
|
96
|
-
else
|
97
|
-
git_svn.fetch(remote)
|
98
|
-
end
|
75
|
+
git_cache.fetch(url) if cached?
|
76
|
+
git.fetch(remote)
|
99
77
|
end
|
100
78
|
|
101
79
|
def cached?
|
@@ -104,11 +82,7 @@ module Braid
|
|
104
82
|
|
105
83
|
def base_revision
|
106
84
|
if revision
|
107
|
-
|
108
|
-
git.rev_parse(revision)
|
109
|
-
else
|
110
|
-
git_svn.commit_hash(remote, revision)
|
111
|
-
end
|
85
|
+
git.rev_parse(revision)
|
112
86
|
else
|
113
87
|
inferred_revision
|
114
88
|
end
|
@@ -156,18 +130,6 @@ module Braid
|
|
156
130
|
hash
|
157
131
|
end
|
158
132
|
|
159
|
-
def self.extract_type_from_url(url)
|
160
|
-
return nil unless url
|
161
|
-
url.sub!(/\/$/, '')
|
162
|
-
|
163
|
-
# check for git:// and svn:// URLs
|
164
|
-
url_scheme = url.split(":").first
|
165
|
-
return url_scheme if TYPES.include?(url_scheme)
|
166
|
-
|
167
|
-
return "svn" if url[-6..-1] == "/trunk"
|
168
|
-
return "git" if url[-4..-1] == ".git"
|
169
|
-
end
|
170
|
-
|
171
133
|
def self.extract_path_from_url(url)
|
172
134
|
return nil unless url
|
173
135
|
name = File.basename(url)
|
data/lib/braid/operations.rb
CHANGED
@@ -41,7 +41,7 @@ module Braid
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
-
# The command proxy is meant to encapsulate commands such as git,
|
44
|
+
# The command proxy is meant to encapsulate commands such as git, that work with subcommands.
|
45
45
|
class Proxy
|
46
46
|
include Singleton
|
47
47
|
|
@@ -157,6 +157,7 @@ module Braid
|
|
157
157
|
message_file = Tempfile.new("braid_commit")
|
158
158
|
message_file.print("Braid: #{message}")
|
159
159
|
message_file.flush
|
160
|
+
message_file.close
|
160
161
|
cmd << " -F #{message_file.path}"
|
161
162
|
end
|
162
163
|
cmd << " #{args.join(' ')}" unless args.empty?
|
@@ -207,14 +208,10 @@ module Braid
|
|
207
208
|
true
|
208
209
|
end
|
209
210
|
|
210
|
-
# Checks git
|
211
|
+
# Checks git remotes.
|
211
212
|
def remote_url(remote)
|
212
213
|
key = "remote.#{remote}.url"
|
213
|
-
|
214
|
-
invoke(:config, key)
|
215
|
-
rescue ShellExecutionError
|
216
|
-
invoke(:config, "svn-#{key}")
|
217
|
-
end
|
214
|
+
invoke(:config, key)
|
218
215
|
rescue ShellExecutionError
|
219
216
|
nil
|
220
217
|
end
|
@@ -320,52 +317,6 @@ module Braid
|
|
320
317
|
end
|
321
318
|
end
|
322
319
|
|
323
|
-
class GitSvn < Proxy
|
324
|
-
def self.command;
|
325
|
-
"git svn";
|
326
|
-
end
|
327
|
-
|
328
|
-
def commit_hash(remote, revision)
|
329
|
-
out = invoke(:log, "--show-commit --oneline", "-r #{revision}", remote)
|
330
|
-
part = out.to_s.split("|")[1]
|
331
|
-
part.strip!
|
332
|
-
raise UnknownRevision, "r#{revision}" unless part
|
333
|
-
git.rev_parse(part)
|
334
|
-
end
|
335
|
-
|
336
|
-
def fetch(remote)
|
337
|
-
sh("git svn fetch #{remote} 2>&1 >/dev/null")
|
338
|
-
end
|
339
|
-
|
340
|
-
def init(remote, path)
|
341
|
-
invoke(:init, "-R", remote, "--id=#{remote}", path)
|
342
|
-
true
|
343
|
-
end
|
344
|
-
|
345
|
-
private
|
346
|
-
|
347
|
-
def command(name)
|
348
|
-
"#{self.class.command} #{name}"
|
349
|
-
end
|
350
|
-
|
351
|
-
def git
|
352
|
-
Git.instance
|
353
|
-
end
|
354
|
-
end
|
355
|
-
|
356
|
-
class Svn < Proxy
|
357
|
-
def clean_revision(revision)
|
358
|
-
revision.to_i if revision
|
359
|
-
end
|
360
|
-
|
361
|
-
def head_revision(path)
|
362
|
-
# not using svn info because it's retarded and doesn't show the actual last changed rev for the url
|
363
|
-
# git svn has no clue on how to get the actual HEAD revision number on it's own
|
364
|
-
status, out, err = exec!("svn log -q --limit 1 #{path}")
|
365
|
-
out.split(/\n/).find { |x| x.match /^r\d+/ }.split(" | ")[0][1..-1].to_i
|
366
|
-
end
|
367
|
-
end
|
368
|
-
|
369
320
|
class GitCache
|
370
321
|
include Singleton
|
371
322
|
|
@@ -407,14 +358,6 @@ module Braid
|
|
407
358
|
Git.instance
|
408
359
|
end
|
409
360
|
|
410
|
-
def git_svn
|
411
|
-
GitSvn.instance
|
412
|
-
end
|
413
|
-
|
414
|
-
def svn
|
415
|
-
Svn.instance
|
416
|
-
end
|
417
|
-
|
418
361
|
def git_cache
|
419
362
|
GitCache.instance
|
420
363
|
end
|
data/lib/braid/version.rb
CHANGED
data/lib/braid.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
$:.unshift dirname = File.dirname(__FILE__)
|
2
1
|
require 'braid/version'
|
3
2
|
|
4
3
|
module Braid
|
@@ -37,12 +36,15 @@ module Braid
|
|
37
36
|
end
|
38
37
|
end
|
39
38
|
|
40
|
-
require
|
39
|
+
#require 'braid/core_ext'
|
41
40
|
require 'braid/operations'
|
42
41
|
require 'braid/mirror'
|
43
42
|
require 'braid/config'
|
44
43
|
require 'braid/command'
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
44
|
+
require 'braid/commands/add'
|
45
|
+
require 'braid/commands/diff'
|
46
|
+
require 'braid/commands/list'
|
47
|
+
require 'braid/commands/push'
|
48
|
+
require 'braid/commands/remove'
|
49
|
+
require 'braid/commands/setup'
|
50
|
+
require 'braid/commands/update'
|
@@ -1,52 +1,49 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/test_helper'
|
2
2
|
|
3
|
-
|
4
|
-
db = "tmp.yml"
|
5
|
-
|
3
|
+
describe "Braid::Config, when empty" do
|
6
4
|
before(:each) do
|
7
|
-
@config = Braid::Config.new(
|
5
|
+
@config = Braid::Config.new("tmp.yml")
|
8
6
|
end
|
9
7
|
|
10
8
|
after(:each) do
|
11
|
-
FileUtils.rm(
|
9
|
+
FileUtils.rm("tmp.yml") rescue nil
|
12
10
|
end
|
13
|
-
end
|
14
|
-
|
15
|
-
describe "Braid::Config, when empty" do
|
16
|
-
it_should_behave_like "Braid::Config, in general"
|
17
11
|
|
18
12
|
it "should not get a mirror by name" do
|
19
|
-
@config.get("path").should
|
20
|
-
lambda { @config.get!("path") }.should
|
13
|
+
@config.get("path").should be_nil
|
14
|
+
lambda { @config.get!("path") }.should raise_error(Braid::Config::MirrorDoesNotExist)
|
21
15
|
end
|
22
16
|
|
23
17
|
it "should add a mirror and its params" do
|
24
18
|
@mirror = build_mirror
|
25
19
|
@config.add(@mirror)
|
26
|
-
@config.get("path").path.
|
20
|
+
@config.get("path").path.should_not be_nil
|
27
21
|
end
|
28
22
|
end
|
29
23
|
|
30
24
|
describe "Braid::Config, with one mirror" do
|
31
|
-
it_should_behave_like "Braid::Config, in general"
|
32
|
-
|
33
25
|
before(:each) do
|
26
|
+
@config = Braid::Config.new("tmp.yml")
|
34
27
|
@mirror = build_mirror
|
35
28
|
@config.add(@mirror)
|
36
29
|
end
|
37
30
|
|
31
|
+
after(:each) do
|
32
|
+
FileUtils.rm("tmp.yml") rescue nil
|
33
|
+
end
|
34
|
+
|
38
35
|
it "should get the mirror by name" do
|
39
36
|
@config.get("path").should == @mirror
|
40
37
|
@config.get!("path").should == @mirror
|
41
38
|
end
|
42
39
|
|
43
40
|
it "should raise when trying to overwrite a mirror on add" do
|
44
|
-
lambda { @config.add(@mirror) }.should
|
41
|
+
lambda { @config.add(@mirror) }.should raise_error(Braid::Config::PathAlreadyInUse)
|
45
42
|
end
|
46
43
|
|
47
44
|
it "should remove the mirror" do
|
48
45
|
@config.remove(@mirror)
|
49
|
-
@config.get("path").should
|
46
|
+
@config.get("path").should be_nil
|
50
47
|
end
|
51
48
|
|
52
49
|
it "should update the mirror with new params" do
|
@@ -57,6 +54,6 @@ describe "Braid::Config, with one mirror" do
|
|
57
54
|
|
58
55
|
it "should raise when trying to update nonexistent mirror" do
|
59
56
|
@mirror.instance_variable_set("@path", "other")
|
60
|
-
lambda { @config.update(@mirror) }.should
|
57
|
+
lambda { @config.update(@mirror) }.should raise_error(Braid::Config::MirrorDoesNotExist)
|
61
58
|
end
|
62
59
|
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../integration_helper'
|
2
|
+
|
3
|
+
describe "Adding a mirror in a clean repository" do
|
4
|
+
|
5
|
+
before do
|
6
|
+
FileUtils.rm_rf(TMP_PATH)
|
7
|
+
FileUtils.mkdir_p(TMP_PATH)
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "from a git repository" do
|
11
|
+
before do
|
12
|
+
@shiny = create_git_repo_from_fixture("shiny")
|
13
|
+
@skit1 = create_git_repo_from_fixture("skit1")
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should add the files and commit" do
|
17
|
+
in_dir(@shiny) do
|
18
|
+
`#{BRAID_BIN} add #{@skit1}`
|
19
|
+
end
|
20
|
+
|
21
|
+
file_name = "skit1/layouts/layout.liquid"
|
22
|
+
output = `diff -U 3 #{File.join(FIXTURE_PATH, file_name)} #{File.join(TMP_PATH, "shiny", file_name)}`
|
23
|
+
$?.should be_success
|
24
|
+
|
25
|
+
output = `git log --pretty=oneline`.split("\n")
|
26
|
+
output.length.should == 2
|
27
|
+
output[0].should =~ /Braid: Add mirror 'skit1' at '[0-9a-f]{7}'/
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should create .braids and add the mirror to it" do
|
31
|
+
in_dir(@shiny) do
|
32
|
+
`#{BRAID_BIN} add #{@skit1}`
|
33
|
+
end
|
34
|
+
|
35
|
+
braids = YAML::load_file("#{@shiny}/.braids")
|
36
|
+
braids["skit1"]["squashed"].should == true
|
37
|
+
braids["skit1"]["url"].should == @skit1
|
38
|
+
braids["skit1"]["revision"].should_not be_nil
|
39
|
+
braids["skit1"]["branch"].should == "master"
|
40
|
+
braids["skit1"]["remote"].should == "master/braid/skit1"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -13,7 +13,7 @@ describe "Updating a mirror without conflicts" do
|
|
13
13
|
@skit1 = create_git_repo_from_fixture("skit1")
|
14
14
|
|
15
15
|
in_dir(@shiny) do
|
16
|
-
`#{BRAID_BIN} add
|
16
|
+
`#{BRAID_BIN} add #{@skit1}`
|
17
17
|
end
|
18
18
|
|
19
19
|
update_dir_from_fixture("skit1", "skit1.1")
|
@@ -37,7 +37,7 @@ describe "Updating a mirror without conflicts" do
|
|
37
37
|
|
38
38
|
file_name = "layouts/layout.liquid"
|
39
39
|
output = `diff -U 3 #{File.join(FIXTURE_PATH, "skit1.2", file_name)} #{File.join(TMP_PATH, "shiny", "skit1", file_name)}`
|
40
|
-
$?.should
|
40
|
+
$?.should be_success
|
41
41
|
|
42
42
|
output = `git log --pretty=oneline`.split("\n")
|
43
43
|
output.length.should == 3
|
@@ -45,43 +45,4 @@ describe "Updating a mirror without conflicts" do
|
|
45
45
|
end
|
46
46
|
|
47
47
|
end
|
48
|
-
|
49
|
-
describe "from a svn repository" do
|
50
|
-
before do
|
51
|
-
@shiny = create_git_repo_from_fixture("shiny")
|
52
|
-
@skit1 = create_svn_repo_from_fixture("skit1")
|
53
|
-
@skit1_wc = File.join(TMP_PATH, "skit1_wc")
|
54
|
-
|
55
|
-
in_dir(@shiny) do
|
56
|
-
`#{BRAID_BIN} add --type svn #{@skit1}`
|
57
|
-
end
|
58
|
-
|
59
|
-
update_dir_from_fixture("skit1_wc", "skit1.1")
|
60
|
-
in_dir(@skit1_wc) do
|
61
|
-
`svn commit -m "change default color"`
|
62
|
-
end
|
63
|
-
|
64
|
-
update_dir_from_fixture("skit1_wc", "skit1.2")
|
65
|
-
in_dir(@skit1_wc) do
|
66
|
-
`svn commit -m "add a happy note"`
|
67
|
-
end
|
68
|
-
|
69
|
-
end
|
70
|
-
|
71
|
-
it "should add the files and commit" do
|
72
|
-
in_dir(@shiny) do
|
73
|
-
`#{BRAID_BIN} update skit1`
|
74
|
-
end
|
75
|
-
|
76
|
-
file_name = "layouts/layout.liquid"
|
77
|
-
output = `diff -U 3 #{File.join(FIXTURE_PATH, "skit1.2", file_name)} #{File.join(TMP_PATH, "shiny", "skit1", file_name)}`
|
78
|
-
$?.should.be.success
|
79
|
-
|
80
|
-
output = `git log --pretty=oneline`.split("\n")
|
81
|
-
output.length.should == 3
|
82
|
-
output[0].should =~ /Braid: Update mirror 'skit1' to r3/
|
83
|
-
end
|
84
|
-
|
85
|
-
end
|
86
|
-
|
87
48
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'rubygems'
|
2
|
-
require '
|
3
|
-
require 'mocha'
|
2
|
+
require 'rspec'
|
3
|
+
require 'mocha/api'
|
4
4
|
|
5
5
|
require 'tempfile'
|
6
6
|
require 'fileutils'
|
@@ -8,15 +8,11 @@ require 'pathname'
|
|
8
8
|
|
9
9
|
TMP_PATH = File.join(Dir.tmpdir, "braid_integration")
|
10
10
|
BRAID_PATH = Pathname.new(File.dirname(__FILE__)).parent.realpath
|
11
|
-
FIXTURE_PATH = File.join(BRAID_PATH, "
|
11
|
+
FIXTURE_PATH = File.join(BRAID_PATH, "spec", "fixtures")
|
12
12
|
FileUtils.rm_rf(TMP_PATH)
|
13
13
|
FileUtils.mkdir_p(TMP_PATH)
|
14
14
|
BRAID_BIN = File.join(BRAID_PATH, "bin", "braid")
|
15
15
|
|
16
|
-
#def exec(cmd)
|
17
|
-
# `cd #{TMP} && #{cmd}`
|
18
|
-
#end
|
19
|
-
|
20
16
|
def in_dir(dir = TMP_PATH)
|
21
17
|
Dir.chdir(dir)
|
22
18
|
yield
|
@@ -49,22 +45,3 @@ def create_git_repo_from_fixture(fixture_name)
|
|
49
45
|
|
50
46
|
git_repo
|
51
47
|
end
|
52
|
-
|
53
|
-
def create_svn_repo_from_fixture(fixture_name)
|
54
|
-
svn_wc = File.join(TMP_PATH, fixture_name + "_wc")
|
55
|
-
svn_repo = File.join(TMP_PATH, fixture_name)
|
56
|
-
run_cmds(<<-EOD)
|
57
|
-
svnadmin create #{svn_repo}
|
58
|
-
svn co file://#{svn_repo} #{svn_wc}
|
59
|
-
EOD
|
60
|
-
update_dir_from_fixture(fixture_name + "_wc", fixture_name)
|
61
|
-
in_dir(svn_wc) do
|
62
|
-
run_cmds(<<-EOD)
|
63
|
-
svn add *
|
64
|
-
svn commit -m "initial commit of #{fixture_name}"
|
65
|
-
EOD
|
66
|
-
end
|
67
|
-
"file://#{svn_repo}"
|
68
|
-
end
|
69
|
-
|
70
|
-
|
@@ -6,35 +6,6 @@ describe "Braid::Mirror.new_from_options" do
|
|
6
6
|
@mirror.branch.should == "master"
|
7
7
|
end
|
8
8
|
|
9
|
-
it "should default type to git, from protocol" do
|
10
|
-
new_from_options("git://path")
|
11
|
-
@mirror.type.should == "git"
|
12
|
-
end
|
13
|
-
|
14
|
-
it "should default type to git, if path ends in .git" do
|
15
|
-
new_from_options("http://path.git")
|
16
|
-
@mirror.type.should == "git"
|
17
|
-
end
|
18
|
-
|
19
|
-
it "should default type to svn, from protocol" do
|
20
|
-
new_from_options("svn://path")
|
21
|
-
@mirror.type.should == "svn"
|
22
|
-
end
|
23
|
-
|
24
|
-
it "should default type to svn, if path ends in /trunk" do
|
25
|
-
new_from_options("http://path/trunk")
|
26
|
-
@mirror.type.should == "svn"
|
27
|
-
end
|
28
|
-
|
29
|
-
it "should raise if no type can be guessed" do
|
30
|
-
lambda { new_from_options("http://path") }.should.raise(Braid::Mirror::CannotGuessType)
|
31
|
-
end
|
32
|
-
|
33
|
-
it "should default mirror to previous to last path part, if last path part is /trunk" do
|
34
|
-
new_from_options("http://path/trunk")
|
35
|
-
@mirror.path.should == "path"
|
36
|
-
end
|
37
|
-
|
38
9
|
it "should default mirror to last path part, ignoring trailing .git" do
|
39
10
|
new_from_options("http://path.git")
|
40
11
|
@mirror.path.should == "path"
|
@@ -69,7 +40,7 @@ end
|
|
69
40
|
describe "Braid::Mirror#base_revision" do
|
70
41
|
it "should be inferred when no revision is set" do
|
71
42
|
@mirror = build_mirror
|
72
|
-
@mirror.revision.should
|
43
|
+
@mirror.revision.should be_nil
|
73
44
|
@mirror.expects(:inferred_revision).returns('b' * 40)
|
74
45
|
@mirror.base_revision.should == 'b' * 40
|
75
46
|
end
|
@@ -100,11 +71,11 @@ describe "Braid::Mirror#cached?" do
|
|
100
71
|
|
101
72
|
it "should be true when the remote path matches the cache path" do
|
102
73
|
git.expects(:remote_url).with(@mirror.remote).returns(git_cache.path(@mirror.url))
|
103
|
-
@mirror.should
|
74
|
+
@mirror.should be_cached
|
104
75
|
end
|
105
76
|
|
106
77
|
it "should be false if the remote does not point to the cache" do
|
107
78
|
git.expects(:remote_url).with(@mirror.remote).returns(@mirror.url)
|
108
|
-
@mirror.
|
79
|
+
@mirror.should_not be_cached
|
109
80
|
end
|
110
81
|
end
|
@@ -18,7 +18,7 @@ describe "Braid::Operations::Git#rev_parse" do
|
|
18
18
|
it "should raise a revision error when the hash is not found" do
|
19
19
|
ambiguous_revision = 'b' * 7
|
20
20
|
git.expects(:exec).returns([1, ambiguous_revision, "fatal: ..."])
|
21
|
-
lambda { git.rev_parse(ambiguous_revision) }.should
|
21
|
+
lambda { git.rev_parse(ambiguous_revision) }.should raise_error(Braid::Operations::UnknownRevision)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
metadata
CHANGED
@@ -1,89 +1,99 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: realityforge-braid
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 63
|
5
5
|
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 8
|
9
|
+
- 0
|
10
|
+
version: 0.8.0
|
6
11
|
platform: ruby
|
7
|
-
authors:
|
12
|
+
authors:
|
8
13
|
- Cristi Balan
|
9
14
|
- Norbert Crombach
|
10
15
|
autorequire:
|
11
16
|
bindir: bin
|
12
17
|
cert_chain: []
|
13
|
-
|
14
|
-
|
15
|
-
|
18
|
+
|
19
|
+
date: 2013-02-11 00:00:00 +11:00
|
20
|
+
default_executable: braid
|
21
|
+
dependencies:
|
22
|
+
- !ruby/object:Gem::Dependency
|
16
23
|
name: main
|
17
|
-
requirement: !ruby/object:Gem::Requirement
|
18
|
-
none: false
|
19
|
-
requirements:
|
20
|
-
- - ! '>='
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: 4.7.3
|
23
|
-
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
|
25
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
26
26
|
none: false
|
27
|
-
requirements:
|
28
|
-
- -
|
29
|
-
- !ruby/object:Gem::Version
|
27
|
+
requirements:
|
28
|
+
- - ">="
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
hash: 37
|
31
|
+
segments:
|
32
|
+
- 4
|
33
|
+
- 7
|
34
|
+
- 3
|
30
35
|
version: 4.7.3
|
31
|
-
|
36
|
+
type: :runtime
|
37
|
+
version_requirements: *id001
|
38
|
+
- !ruby/object:Gem::Dependency
|
32
39
|
name: open4
|
33
|
-
|
40
|
+
prerelease: false
|
41
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
34
42
|
none: false
|
35
|
-
requirements:
|
36
|
-
- -
|
37
|
-
- !ruby/object:Gem::Version
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
hash: 21
|
47
|
+
segments:
|
48
|
+
- 1
|
49
|
+
- 0
|
50
|
+
- 1
|
38
51
|
version: 1.0.1
|
39
52
|
type: :runtime
|
53
|
+
version_requirements: *id002
|
54
|
+
- !ruby/object:Gem::Dependency
|
55
|
+
name: rspec
|
40
56
|
prerelease: false
|
41
|
-
|
42
|
-
none: false
|
43
|
-
requirements:
|
44
|
-
- - ! '>='
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version: 1.0.1
|
47
|
-
- !ruby/object:Gem::Dependency
|
48
|
-
name: test-spec
|
49
|
-
requirement: !ruby/object:Gem::Requirement
|
57
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
50
58
|
none: false
|
51
|
-
requirements:
|
52
|
-
- -
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
|
59
|
+
requirements:
|
60
|
+
- - "="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
hash: 63
|
63
|
+
segments:
|
64
|
+
- 2
|
65
|
+
- 12
|
66
|
+
- 0
|
67
|
+
version: 2.12.0
|
55
68
|
type: :development
|
56
|
-
|
57
|
-
|
58
|
-
none: false
|
59
|
-
requirements:
|
60
|
-
- - ! '>='
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
version: 0.10.0
|
63
|
-
- !ruby/object:Gem::Dependency
|
69
|
+
version_requirements: *id003
|
70
|
+
- !ruby/object:Gem::Dependency
|
64
71
|
name: mocha
|
65
|
-
requirement: !ruby/object:Gem::Requirement
|
66
|
-
none: false
|
67
|
-
requirements:
|
68
|
-
- - ! '>='
|
69
|
-
- !ruby/object:Gem::Version
|
70
|
-
version: 0.9.11
|
71
|
-
type: :development
|
72
72
|
prerelease: false
|
73
|
-
|
73
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
74
74
|
none: false
|
75
|
-
requirements:
|
76
|
-
- -
|
77
|
-
- !ruby/object:Gem::Version
|
75
|
+
requirements:
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
hash: 45
|
79
|
+
segments:
|
80
|
+
- 0
|
81
|
+
- 9
|
82
|
+
- 11
|
78
83
|
version: 0.9.11
|
84
|
+
type: :development
|
85
|
+
version_requirements: *id004
|
79
86
|
description: A simple tool for tracking vendor branches in git.
|
80
87
|
email: evil@che.lu
|
81
|
-
executables:
|
88
|
+
executables:
|
82
89
|
- braid
|
83
90
|
extensions: []
|
91
|
+
|
84
92
|
extra_rdoc_files: []
|
85
|
-
|
93
|
+
|
94
|
+
files:
|
86
95
|
- .gitignore
|
96
|
+
- .ruby-version
|
87
97
|
- Gemfile
|
88
98
|
- LICENSE
|
89
99
|
- README.md
|
@@ -103,53 +113,55 @@ files:
|
|
103
113
|
- lib/braid/mirror.rb
|
104
114
|
- lib/braid/operations.rb
|
105
115
|
- lib/braid/version.rb
|
106
|
-
-
|
107
|
-
-
|
108
|
-
-
|
109
|
-
-
|
110
|
-
-
|
111
|
-
-
|
112
|
-
-
|
113
|
-
-
|
114
|
-
-
|
115
|
-
-
|
116
|
-
-
|
117
|
-
-
|
118
|
-
|
119
|
-
- test/test_helper.rb
|
116
|
+
- spec/config_spec.rb
|
117
|
+
- spec/fixtures/shiny/README
|
118
|
+
- spec/fixtures/skit1.1/layouts/layout.liquid
|
119
|
+
- spec/fixtures/skit1.2/layouts/layout.liquid
|
120
|
+
- spec/fixtures/skit1/layouts/layout.liquid
|
121
|
+
- spec/fixtures/skit1/preview.png
|
122
|
+
- spec/integration/adding_spec.rb
|
123
|
+
- spec/integration/updating_spec.rb
|
124
|
+
- spec/integration_helper.rb
|
125
|
+
- spec/mirror_spec.rb
|
126
|
+
- spec/operations_spec.rb
|
127
|
+
- spec/test_helper.rb
|
128
|
+
has_rdoc: true
|
120
129
|
homepage: http://evil.che.lu/projects/braid
|
121
130
|
licenses: []
|
131
|
+
|
122
132
|
post_install_message:
|
123
|
-
rdoc_options:
|
133
|
+
rdoc_options:
|
124
134
|
- --line-numbers
|
125
135
|
- --inline-source
|
126
136
|
- --title
|
127
137
|
- braid
|
128
138
|
- --main
|
129
|
-
require_paths:
|
139
|
+
require_paths:
|
130
140
|
- lib
|
131
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
141
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
132
142
|
none: false
|
133
|
-
requirements:
|
134
|
-
- -
|
135
|
-
- !ruby/object:Gem::Version
|
136
|
-
|
137
|
-
segments:
|
143
|
+
requirements:
|
144
|
+
- - ">="
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
hash: 3
|
147
|
+
segments:
|
138
148
|
- 0
|
139
|
-
|
140
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
149
|
+
version: "0"
|
150
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
141
151
|
none: false
|
142
|
-
requirements:
|
143
|
-
- -
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
|
146
|
-
segments:
|
152
|
+
requirements:
|
153
|
+
- - ">="
|
154
|
+
- !ruby/object:Gem::Version
|
155
|
+
hash: 3
|
156
|
+
segments:
|
147
157
|
- 0
|
148
|
-
|
158
|
+
version: "0"
|
149
159
|
requirements: []
|
160
|
+
|
150
161
|
rubyforge_project: braid
|
151
|
-
rubygems_version: 1.
|
162
|
+
rubygems_version: 1.6.2
|
152
163
|
signing_key:
|
153
164
|
specification_version: 3
|
154
165
|
summary: A simple tool for tracking vendor branches in git.
|
155
166
|
test_files: []
|
167
|
+
|
data/lib/core_ext.rb
DELETED
data/test/braid_test.rb
DELETED
@@ -1,80 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../integration_helper'
|
2
|
-
|
3
|
-
describe "Adding a mirror in a clean repository" do
|
4
|
-
|
5
|
-
before do
|
6
|
-
FileUtils.rm_rf(TMP_PATH)
|
7
|
-
FileUtils.mkdir_p(TMP_PATH)
|
8
|
-
end
|
9
|
-
|
10
|
-
describe "from a git repository" do
|
11
|
-
before do
|
12
|
-
@shiny = create_git_repo_from_fixture("shiny")
|
13
|
-
@skit1 = create_git_repo_from_fixture("skit1")
|
14
|
-
end
|
15
|
-
|
16
|
-
it "should add the files and commit" do
|
17
|
-
in_dir(@shiny) do
|
18
|
-
`#{BRAID_BIN} add --type git #{@skit1}`
|
19
|
-
end
|
20
|
-
|
21
|
-
file_name = "skit1/layouts/layout.liquid"
|
22
|
-
output = `diff -U 3 #{File.join(FIXTURE_PATH, file_name)} #{File.join(TMP_PATH, "shiny", file_name)}`
|
23
|
-
$?.should.be.success
|
24
|
-
|
25
|
-
output = `git log --pretty=oneline`.split("\n")
|
26
|
-
output.length.should == 2
|
27
|
-
output[0].should =~ /Braid: Add mirror 'skit1' at '[0-9a-f]{7}'/
|
28
|
-
end
|
29
|
-
|
30
|
-
it "should create .braids and add the mirror to it" do
|
31
|
-
in_dir(@shiny) do
|
32
|
-
`#{BRAID_BIN} add --type git #{@skit1}`
|
33
|
-
end
|
34
|
-
|
35
|
-
braids = YAML::load_file("#{@shiny}/.braids")
|
36
|
-
braids["skit1"]["squashed"].should == true
|
37
|
-
braids["skit1"]["url"].should == @skit1
|
38
|
-
braids["skit1"]["type"].should == "git"
|
39
|
-
braids["skit1"]["revision"].should.not.be nil
|
40
|
-
braids["skit1"]["branch"].should == "master"
|
41
|
-
braids["skit1"]["remote"].should == "braid/skit1"
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
describe "from an svn repository" do
|
46
|
-
before do
|
47
|
-
@shiny = create_git_repo_from_fixture("shiny")
|
48
|
-
@skit1 = create_svn_repo_from_fixture("skit1")
|
49
|
-
end
|
50
|
-
|
51
|
-
it "should add the files and commit" do
|
52
|
-
in_dir(@shiny) do
|
53
|
-
`#{BRAID_BIN} add --type svn #{@skit1}`
|
54
|
-
end
|
55
|
-
|
56
|
-
file_name = "skit1/layouts/layout.liquid"
|
57
|
-
output = `diff -U 3 #{File.join(FIXTURE_PATH, file_name)} #{File.join(TMP_PATH, "shiny", file_name)}`
|
58
|
-
$?.should.be.success
|
59
|
-
|
60
|
-
output = `git log --pretty=oneline`.split("\n")
|
61
|
-
output.length.should == 2
|
62
|
-
output[0].should =~ /Braid: Add mirror 'skit1' at r1/
|
63
|
-
end
|
64
|
-
|
65
|
-
it "should create .braids and add the mirror to it" do
|
66
|
-
in_dir(@shiny) do
|
67
|
-
`#{BRAID_BIN} add --type svn #{@skit1}`
|
68
|
-
end
|
69
|
-
|
70
|
-
braids = YAML::load_file("#{@shiny}/.braids")
|
71
|
-
braids["skit1"]["squashed"].should == true
|
72
|
-
braids["skit1"]["url"].should == @skit1
|
73
|
-
braids["skit1"]["type"].should == "svn"
|
74
|
-
braids["skit1"]["revision"].should == 1
|
75
|
-
braids["skit1"]["remote"].should == "braid/skit1"
|
76
|
-
braids["skit1"]["branch"].should.be == nil
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
end
|