braid 1.0.16 → 1.0.17
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +0 -2
- data/README.md +11 -15
- data/bin/braid +20 -39
- data/braid.gemspec +1 -1
- data/lib/braid/commands/add.rb +0 -3
- data/lib/braid/commands/diff.rb +16 -7
- data/lib/braid/commands/push.rb +4 -0
- data/lib/braid/commands/status.rb +1 -3
- data/lib/braid/commands/update.rb +7 -11
- data/lib/braid/mirror.rb +11 -13
- data/lib/braid/operations.rb +4 -0
- data/lib/braid/version.rb +1 -1
- data/lib/braid.rb +0 -1
- data/spec/config_spec.rb +9 -9
- data/spec/integration/adding_spec.rb +41 -19
- data/spec/integration/diff_spec.rb +185 -0
- data/spec/{integration_helper.rb → integration/integration_helper.rb} +31 -7
- data/spec/integration/push_spec.rb +73 -12
- data/spec/integration/remove_spec.rb +59 -0
- data/spec/integration/status_spec.rb +59 -0
- data/spec/integration/updating_spec.rb +65 -23
- data/spec/mirror_spec.rb +11 -11
- data/spec/operations_spec.rb +8 -8
- metadata +8 -6
- data/lib/braid/commands/list.rb +0 -10
@@ -0,0 +1,185 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/integration_helper'
|
2
|
+
|
3
|
+
describe 'Running braid diff on a mirror' do
|
4
|
+
before do
|
5
|
+
FileUtils.rm_rf(TMP_PATH)
|
6
|
+
FileUtils.mkdir_p(TMP_PATH)
|
7
|
+
@repository_dir = create_git_repo_from_fixture('shiny')
|
8
|
+
@vendor_repository_dir = create_git_repo_from_fixture('skit1')
|
9
|
+
end
|
10
|
+
|
11
|
+
describe 'braided directly in' do
|
12
|
+
before do
|
13
|
+
in_dir(@repository_dir) do
|
14
|
+
run_command("#{BRAID_BIN} add #{@vendor_repository_dir}")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe 'with no changes' do
|
19
|
+
it 'should emit no output when named in braid diff' do
|
20
|
+
diff = nil
|
21
|
+
in_dir(@repository_dir) do
|
22
|
+
diff = run_command("#{BRAID_BIN} diff skit1")
|
23
|
+
end
|
24
|
+
|
25
|
+
expect(diff).to eq('')
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'should emit only banners when braid diff all' do
|
29
|
+
diff = nil
|
30
|
+
in_dir(@repository_dir) do
|
31
|
+
diff = run_command("#{BRAID_BIN} diff")
|
32
|
+
end
|
33
|
+
|
34
|
+
expect(diff).to eq("=======================================================\nBraid: Diffing skit1\n=======================================================\n")
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe 'with changes' do
|
39
|
+
before do
|
40
|
+
FileUtils.cp_r(File.join(FIXTURE_PATH, 'skit1.1') + '/.', "#{@repository_dir}/skit1")
|
41
|
+
in_dir(@repository_dir) do
|
42
|
+
run_command('git add *')
|
43
|
+
run_command('git commit -m "Some local changes"')
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'should emit diff when named in braid diff' do
|
48
|
+
diff = nil
|
49
|
+
in_dir(@repository_dir) do
|
50
|
+
diff = run_command("#{BRAID_BIN} diff skit1")
|
51
|
+
end
|
52
|
+
|
53
|
+
expect(diff).to eq(<<PATCH)
|
54
|
+
diff --git a/layouts/layout.liquid b/layouts/layout.liquid
|
55
|
+
index 9f75009..25a4b32 100644
|
56
|
+
--- a/layouts/layout.liquid
|
57
|
+
+++ b/layouts/layout.liquid
|
58
|
+
@@ -22,7 +22,7 @@
|
59
|
+
<![endif]-->
|
60
|
+
</head>
|
61
|
+
|
62
|
+
-<body class="fixed orange">
|
63
|
+
+<body class="fixed green">
|
64
|
+
<script type="text/javascript">loadPreferences()</script>
|
65
|
+
|
66
|
+
<div id="wrapper">
|
67
|
+
PATCH
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'should emit only banners when braid diff all' do
|
71
|
+
diff = nil
|
72
|
+
in_dir(@repository_dir) do
|
73
|
+
diff = run_command("#{BRAID_BIN} diff")
|
74
|
+
end
|
75
|
+
|
76
|
+
expect(diff).to eq(<<PATCH)
|
77
|
+
=======================================================
|
78
|
+
Braid: Diffing skit1
|
79
|
+
=======================================================
|
80
|
+
diff --git a/layouts/layout.liquid b/layouts/layout.liquid
|
81
|
+
index 9f75009..25a4b32 100644
|
82
|
+
--- a/layouts/layout.liquid
|
83
|
+
+++ b/layouts/layout.liquid
|
84
|
+
@@ -22,7 +22,7 @@
|
85
|
+
<![endif]-->
|
86
|
+
</head>
|
87
|
+
|
88
|
+
-<body class="fixed orange">
|
89
|
+
+<body class="fixed green">
|
90
|
+
<script type="text/javascript">loadPreferences()</script>
|
91
|
+
|
92
|
+
<div id="wrapper">
|
93
|
+
PATCH
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
describe 'braided subdirectory into' do
|
99
|
+
before do
|
100
|
+
in_dir(@repository_dir) do
|
101
|
+
run_command("#{BRAID_BIN} add #{@vendor_repository_dir} --path layouts")
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
describe 'with no changes' do
|
106
|
+
it 'should emit no output when named in braid diff' do
|
107
|
+
diff = nil
|
108
|
+
in_dir(@repository_dir) do
|
109
|
+
diff = run_command("#{BRAID_BIN} diff skit1")
|
110
|
+
end
|
111
|
+
|
112
|
+
expect(diff).to eq('')
|
113
|
+
end
|
114
|
+
|
115
|
+
it 'should emit only banners when braid diff all' do
|
116
|
+
diff = nil
|
117
|
+
in_dir(@repository_dir) do
|
118
|
+
diff = run_command("#{BRAID_BIN} diff")
|
119
|
+
end
|
120
|
+
|
121
|
+
expect(diff).to eq("=======================================================\nBraid: Diffing skit1\n=======================================================\n")
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
|
126
|
+
describe 'with changes' do
|
127
|
+
before do
|
128
|
+
FileUtils.cp_r(File.join(FIXTURE_PATH, 'skit1.1') + '/layouts/.', "#{@repository_dir}/skit1")
|
129
|
+
in_dir(@repository_dir) do
|
130
|
+
run_command('git add *')
|
131
|
+
run_command('git commit -m "Some local changes"')
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
it 'should emit diff when named in braid diff' do
|
136
|
+
diff = nil
|
137
|
+
in_dir(@repository_dir) do
|
138
|
+
diff = run_command("#{BRAID_BIN} diff skit1")
|
139
|
+
end
|
140
|
+
|
141
|
+
expect(diff).to eq(<<PATCH)
|
142
|
+
diff --git a/layout.liquid b/layout.liquid
|
143
|
+
index 9f75009..25a4b32 100644
|
144
|
+
--- a/layout.liquid
|
145
|
+
+++ b/layout.liquid
|
146
|
+
@@ -22,7 +22,7 @@
|
147
|
+
<![endif]-->
|
148
|
+
</head>
|
149
|
+
|
150
|
+
-<body class="fixed orange">
|
151
|
+
+<body class="fixed green">
|
152
|
+
<script type="text/javascript">loadPreferences()</script>
|
153
|
+
|
154
|
+
<div id="wrapper">
|
155
|
+
PATCH
|
156
|
+
end
|
157
|
+
|
158
|
+
it 'should emit only banners when braid diff all' do
|
159
|
+
diff = nil
|
160
|
+
in_dir(@repository_dir) do
|
161
|
+
diff = run_command("#{BRAID_BIN} diff")
|
162
|
+
end
|
163
|
+
|
164
|
+
expect(diff).to eq(<<PATCH)
|
165
|
+
=======================================================
|
166
|
+
Braid: Diffing skit1
|
167
|
+
=======================================================
|
168
|
+
diff --git a/layout.liquid b/layout.liquid
|
169
|
+
index 9f75009..25a4b32 100644
|
170
|
+
--- a/layout.liquid
|
171
|
+
+++ b/layout.liquid
|
172
|
+
@@ -22,7 +22,7 @@
|
173
|
+
<![endif]-->
|
174
|
+
</head>
|
175
|
+
|
176
|
+
-<body class="fixed orange">
|
177
|
+
+<body class="fixed green">
|
178
|
+
<script type="text/javascript">loadPreferences()</script>
|
179
|
+
|
180
|
+
<div id="wrapper">
|
181
|
+
PATCH
|
182
|
+
end
|
183
|
+
end
|
184
|
+
end
|
185
|
+
end
|
@@ -6,10 +6,13 @@ require 'tempfile'
|
|
6
6
|
require 'fileutils'
|
7
7
|
require 'pathname'
|
8
8
|
|
9
|
-
|
10
|
-
|
9
|
+
DEFAULT_NAME = 'Your Name'
|
10
|
+
DEFAULT_EMAIL = 'you@example.com'
|
11
|
+
|
12
|
+
TMP_PATH = File.join(Dir.tmpdir, 'braid_integration')
|
13
|
+
EDITOR_CMD = "#{TMP_PATH}/editor"
|
11
14
|
EDITOR_CMD_PREFIX = "export GIT_EDITOR=#{EDITOR_CMD};"
|
12
|
-
BRAID_PATH
|
15
|
+
BRAID_PATH = Pathname.new(File.dirname(__FILE__)).parent.parent.realpath
|
13
16
|
FIXTURE_PATH = File.join(BRAID_PATH, 'spec', 'fixtures')
|
14
17
|
FileUtils.rm_rf(TMP_PATH)
|
15
18
|
FileUtils.mkdir_p(TMP_PATH)
|
@@ -28,6 +31,24 @@ def assert_no_diff(file1, file2)
|
|
28
31
|
run_command("diff -U 3 #{file1} #{file2}")
|
29
32
|
end
|
30
33
|
|
34
|
+
def assert_commit_attribute(format_key, value, commit_index = 0)
|
35
|
+
output = run_command("git log --pretty=format:#{format_key}").split("\n")
|
36
|
+
regex = value.is_a?(Regexp) ? value : /^#{value}$/
|
37
|
+
expect(output[commit_index]).to match(regex)
|
38
|
+
end
|
39
|
+
|
40
|
+
def assert_commit_subject(value, commit_index = 0)
|
41
|
+
assert_commit_attribute('%s', value, commit_index)
|
42
|
+
end
|
43
|
+
|
44
|
+
def assert_commit_author(value, commit_index = 0)
|
45
|
+
assert_commit_attribute('%an', value, commit_index)
|
46
|
+
end
|
47
|
+
|
48
|
+
def assert_commit_email(value, commit_index = 0)
|
49
|
+
assert_commit_attribute('%ae', value, commit_index)
|
50
|
+
end
|
51
|
+
|
31
52
|
def in_dir(dir = TMP_PATH)
|
32
53
|
Dir.chdir(dir)
|
33
54
|
yield
|
@@ -45,14 +66,17 @@ def update_dir_from_fixture(dir, fixture = dir)
|
|
45
66
|
FileUtils.cp_r(File.join(FIXTURE_PATH, fixture) + '/.', to_dir)
|
46
67
|
end
|
47
68
|
|
48
|
-
def create_git_repo_from_fixture(fixture_name,
|
69
|
+
def create_git_repo_from_fixture(fixture_name, options = {})
|
70
|
+
directory = options[:directory] || fixture_name
|
71
|
+
name = options[:name] || DEFAULT_NAME
|
72
|
+
email = options[:email] || DEFAULT_EMAIL
|
49
73
|
git_repo = File.join(TMP_PATH, directory)
|
50
|
-
update_dir_from_fixture(fixture_name)
|
74
|
+
update_dir_from_fixture(directory, fixture_name)
|
51
75
|
|
52
76
|
in_dir(git_repo) do
|
53
77
|
run_command('git init')
|
54
|
-
run_command("git config user.email \"
|
55
|
-
run_command("git config user.name \"
|
78
|
+
run_command("git config --local user.email \"#{email}\"")
|
79
|
+
run_command("git config --local user.name \"#{name}\"")
|
56
80
|
run_command('git add *')
|
57
81
|
run_command("git commit -m \"initial commit of #{fixture_name}\"")
|
58
82
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require File.dirname(__FILE__) + '
|
1
|
+
require File.dirname(__FILE__) + '/integration_helper'
|
2
2
|
|
3
3
|
describe 'Pushing to a mirror' do
|
4
4
|
|
@@ -9,7 +9,7 @@ describe 'Pushing to a mirror' do
|
|
9
9
|
|
10
10
|
describe 'from a git repository' do
|
11
11
|
before do
|
12
|
-
@repository_dir = create_git_repo_from_fixture('shiny')
|
12
|
+
@repository_dir = create_git_repo_from_fixture('shiny', :name => 'Some body', :email => 'somebody@example.com')
|
13
13
|
@vendor_repository_dir = create_git_repo_from_fixture('skit1')
|
14
14
|
@file_name = 'layouts/layout.liquid'
|
15
15
|
|
@@ -31,33 +31,47 @@ describe 'Pushing to a mirror' do
|
|
31
31
|
context 'with remote updtodate' do
|
32
32
|
it 'should push changes successfully' do
|
33
33
|
braid_output = nil
|
34
|
+
commit_message = 'Make some changes'
|
34
35
|
in_dir(@repository_dir) do
|
35
|
-
set_editor_message(
|
36
|
+
set_editor_message(commit_message)
|
36
37
|
braid_output = run_command("#{EDITOR_CMD_PREFIX} #{BRAID_BIN} push skit1")
|
37
38
|
end
|
38
|
-
braid_output.
|
39
|
-
braid_output.
|
40
|
-
braid_output.
|
39
|
+
expect(braid_output).to match(/Braid: Cloning mirror with local changes./)
|
40
|
+
expect(braid_output).to match(/Make some changes/)
|
41
|
+
expect(braid_output).to match(/Braid: Pushing changes to remote branch master./)
|
41
42
|
|
42
43
|
assert_no_diff("#{FIXTURE_PATH}/skit1.1/#{@file_name}", "#{@repository_dir}/skit1/#{@file_name}")
|
43
44
|
assert_no_diff("#{FIXTURE_PATH}/skit1.1/#{@file_name}", "#{@vendor_repository_dir}/#{@file_name}")
|
45
|
+
|
46
|
+
in_dir(@vendor_repository_dir) do
|
47
|
+
run_command('git checkout master 2>&1')
|
48
|
+
|
49
|
+
assert_commit_subject(commit_message)
|
50
|
+
assert_commit_author('Some body')
|
51
|
+
assert_commit_email('somebody@example.com')
|
52
|
+
end
|
44
53
|
end
|
45
54
|
|
46
55
|
it 'should push changes to specified branch successfully' do
|
56
|
+
commit_message = 'Make some changes'
|
47
57
|
braid_output = nil
|
48
58
|
in_dir(@repository_dir) do
|
49
|
-
set_editor_message(
|
59
|
+
set_editor_message(commit_message)
|
50
60
|
braid_output = run_command("#{EDITOR_CMD_PREFIX} #{BRAID_BIN} push skit1 --branch MyBranch")
|
51
61
|
end
|
52
|
-
braid_output.
|
53
|
-
braid_output.
|
54
|
-
braid_output.
|
62
|
+
expect(braid_output).to match(/Braid: Cloning mirror with local changes./)
|
63
|
+
expect(braid_output).to match(/Make some changes/)
|
64
|
+
expect(braid_output).to match(/Braid: Pushing changes to remote branch MyBranch./)
|
55
65
|
|
56
66
|
assert_no_diff("#{FIXTURE_PATH}/skit1/#{@file_name}", "#{@vendor_repository_dir}/#{@file_name}")
|
57
67
|
assert_no_diff("#{FIXTURE_PATH}/skit1.1/#{@file_name}", "#{@repository_dir}/skit1/#{@file_name}")
|
58
68
|
|
59
69
|
in_dir(@vendor_repository_dir) do
|
60
70
|
run_command('git checkout MyBranch 2>&1')
|
71
|
+
|
72
|
+
assert_commit_subject(commit_message)
|
73
|
+
assert_commit_author('Some body')
|
74
|
+
assert_commit_email('somebody@example.com')
|
61
75
|
end
|
62
76
|
|
63
77
|
assert_no_diff("#{FIXTURE_PATH}/skit1.1/#{@file_name}", "#{@vendor_repository_dir}/#{@file_name}")
|
@@ -73,16 +87,63 @@ describe 'Pushing to a mirror' do
|
|
73
87
|
run_command('git commit -m "Update vendored directory"')
|
74
88
|
end
|
75
89
|
end
|
76
|
-
it 'should push changes
|
90
|
+
it 'should halt before attempting to push changes' do
|
77
91
|
braid_output = nil
|
78
92
|
in_dir(@repository_dir) do
|
79
93
|
set_editor_message('Make some changes')
|
80
94
|
braid_output = run_command("#{EDITOR_CMD_PREFIX} #{BRAID_BIN} push skit1")
|
81
95
|
end
|
82
|
-
braid_output.
|
96
|
+
expect(braid_output).to match(/Braid: Mirror is not up to date. Stopping./)
|
83
97
|
|
84
98
|
assert_no_diff("#{FIXTURE_PATH}/skit1.2/#{@file_name}", "#{TMP_PATH}/skit1/#{@file_name}")
|
85
99
|
end
|
86
100
|
end
|
87
101
|
end
|
102
|
+
|
103
|
+
describe 'from a git repository braided into subdirectory' do
|
104
|
+
before do
|
105
|
+
@repository_dir = create_git_repo_from_fixture('shiny', :name => 'Some body', :email => 'somebody@example.com')
|
106
|
+
@vendor_repository_dir = create_git_repo_from_fixture('skit1')
|
107
|
+
@file_name = 'layouts/layout.liquid'
|
108
|
+
|
109
|
+
in_dir(@repository_dir) do
|
110
|
+
run_command("#{BRAID_BIN} add #{@vendor_repository_dir} --path layouts")
|
111
|
+
end
|
112
|
+
|
113
|
+
in_dir(@vendor_repository_dir) do
|
114
|
+
run_command('git config receive.denyCurrentBranch updateInstead')
|
115
|
+
end
|
116
|
+
|
117
|
+
update_dir_from_fixture('shiny/skit1', 'skit1.1/layouts')
|
118
|
+
in_dir(@repository_dir) do
|
119
|
+
run_command('git add *')
|
120
|
+
run_command('git commit -m "Make some changes to vendored files"')
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
context 'with remote updtodate' do
|
125
|
+
it 'should push changes successfully' do
|
126
|
+
braid_output = nil
|
127
|
+
commit_message = 'Make some changes'
|
128
|
+
in_dir(@repository_dir) do
|
129
|
+
set_editor_message(commit_message)
|
130
|
+
braid_output = run_command("#{EDITOR_CMD_PREFIX} #{BRAID_BIN} push skit1")
|
131
|
+
end
|
132
|
+
expect(braid_output).to match(/Braid: Cloning mirror with local changes./)
|
133
|
+
expect(braid_output).to match(/Make some changes/)
|
134
|
+
expect(braid_output).to match(/Braid: Pushing changes to remote branch master./)
|
135
|
+
|
136
|
+
assert_no_diff("#{FIXTURE_PATH}/skit1.1/#{@file_name}", "#{@repository_dir}/skit1/layout.liquid")
|
137
|
+
assert_no_diff("#{FIXTURE_PATH}/skit1.1/#{@file_name}", "#{@vendor_repository_dir}/#{@file_name}")
|
138
|
+
|
139
|
+
in_dir(@vendor_repository_dir) do
|
140
|
+
run_command('git checkout master 2>&1')
|
141
|
+
|
142
|
+
assert_commit_subject(commit_message)
|
143
|
+
assert_commit_author('Some body')
|
144
|
+
assert_commit_email('somebody@example.com')
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
88
149
|
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/integration_helper'
|
2
|
+
|
3
|
+
describe 'Removing a mirror' do
|
4
|
+
before do
|
5
|
+
FileUtils.rm_rf(TMP_PATH)
|
6
|
+
FileUtils.mkdir_p(TMP_PATH)
|
7
|
+
@repository_dir = create_git_repo_from_fixture('shiny')
|
8
|
+
@vendor_repository_dir = create_git_repo_from_fixture('skit1')
|
9
|
+
end
|
10
|
+
|
11
|
+
describe 'braided directly in' do
|
12
|
+
before do
|
13
|
+
in_dir(@repository_dir) do
|
14
|
+
run_command("#{BRAID_BIN} add #{@vendor_repository_dir}")
|
15
|
+
|
16
|
+
# Next line ensure the remote still exists
|
17
|
+
run_command("#{BRAID_BIN} setup skit1")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should remove the files and the remote' do
|
22
|
+
|
23
|
+
assert_no_diff("#{FIXTURE_PATH}/skit1/layouts/layout.liquid", "#{@repository_dir}/skit1/layouts/layout.liquid")
|
24
|
+
|
25
|
+
in_dir(@repository_dir) do
|
26
|
+
run_command("#{BRAID_BIN} remove skit1")
|
27
|
+
end
|
28
|
+
|
29
|
+
expect(File.exist?("#{@repository_dir}/skit1)")).to eq(false)
|
30
|
+
|
31
|
+
braids = YAML::load_file("#{@repository_dir}/.braids.json")
|
32
|
+
expect(braids['skit1']).to be_nil
|
33
|
+
|
34
|
+
expect(`#{BRAID_BIN} remote | grep skit1`).to eq('')
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe 'braiding a subdirectory in' do
|
39
|
+
before do
|
40
|
+
in_dir(@repository_dir) do
|
41
|
+
run_command("#{BRAID_BIN} add #{@vendor_repository_dir} --path layouts")
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'should remove the files and the remote' do
|
46
|
+
|
47
|
+
assert_no_diff("#{FIXTURE_PATH}/skit1/layouts/layout.liquid", "#{@repository_dir}/skit1/layout.liquid")
|
48
|
+
|
49
|
+
in_dir(@repository_dir) do
|
50
|
+
run_command("#{BRAID_BIN} remove skit1")
|
51
|
+
end
|
52
|
+
|
53
|
+
expect(File.exist?("#{@repository_dir}/skit1)")).to eq(false)
|
54
|
+
|
55
|
+
braids = YAML::load_file("#{@repository_dir}/.braids.json")
|
56
|
+
expect(braids['skit1']).to be_nil
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/integration_helper'
|
2
|
+
|
3
|
+
describe 'Running braid status on a mirror' do
|
4
|
+
before do
|
5
|
+
FileUtils.rm_rf(TMP_PATH)
|
6
|
+
FileUtils.mkdir_p(TMP_PATH)
|
7
|
+
@repository_dir = create_git_repo_from_fixture('shiny')
|
8
|
+
@vendor_repository_dir = create_git_repo_from_fixture('skit1')
|
9
|
+
end
|
10
|
+
|
11
|
+
describe 'braided directly in' do
|
12
|
+
before do
|
13
|
+
in_dir(@repository_dir) do
|
14
|
+
run_command("#{BRAID_BIN} add #{@vendor_repository_dir}")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
describe 'with no changes' do
|
18
|
+
it 'should only emit version when neither modified' do
|
19
|
+
diff = nil
|
20
|
+
in_dir(@repository_dir) do
|
21
|
+
diff = run_command("#{BRAID_BIN} status skit1")
|
22
|
+
end
|
23
|
+
|
24
|
+
expect(diff).to match(/^skit1 \([0-9a-f]{40}\)$/)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe 'with local changes' do
|
29
|
+
it 'should emit local modified indicator' do
|
30
|
+
output = nil
|
31
|
+
in_dir(@repository_dir) do
|
32
|
+
File.open("#{@repository_dir}/skit1/foo.txt", 'wb') { |f| f.write('Hi') }
|
33
|
+
run_command('git add *')
|
34
|
+
run_command('git commit -m "modify mirror"')
|
35
|
+
output = run_command("#{BRAID_BIN} status skit1")
|
36
|
+
end
|
37
|
+
|
38
|
+
expect(output).to match(/^skit1 \([0-9a-f]{40}\) \(Locally Modified\)$/)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe 'with remote changes' do
|
43
|
+
it 'should emit remote modified indicator' do
|
44
|
+
update_dir_from_fixture('skit1', 'skit1.1')
|
45
|
+
in_dir(@vendor_repository_dir) do
|
46
|
+
run_command('git add *')
|
47
|
+
run_command('git commit -m "change default color"')
|
48
|
+
end
|
49
|
+
|
50
|
+
output = nil
|
51
|
+
in_dir(@repository_dir) do
|
52
|
+
output = run_command("#{BRAID_BIN} status skit1")
|
53
|
+
end
|
54
|
+
|
55
|
+
expect(output).to match(/^skit1 \([0-9a-f]{40}\) \(Remote Modified\)$/)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require File.dirname(__FILE__) + '
|
1
|
+
require File.dirname(__FILE__) + '/integration_helper'
|
2
2
|
|
3
3
|
describe 'Updating a mirror' do
|
4
4
|
|
@@ -9,22 +9,22 @@ describe 'Updating a mirror' do
|
|
9
9
|
|
10
10
|
describe 'from a git repository' do
|
11
11
|
before do
|
12
|
-
@
|
13
|
-
@
|
12
|
+
@repository_dir = create_git_repo_from_fixture('shiny')
|
13
|
+
@vendor_repository_dir = create_git_repo_from_fixture('skit1')
|
14
14
|
@file_name = 'layouts/layout.liquid'
|
15
15
|
|
16
|
-
in_dir(@
|
17
|
-
run_command("#{BRAID_BIN} add #{@
|
16
|
+
in_dir(@repository_dir) do
|
17
|
+
run_command("#{BRAID_BIN} add #{@vendor_repository_dir}")
|
18
18
|
end
|
19
19
|
|
20
20
|
update_dir_from_fixture('skit1', 'skit1.1')
|
21
|
-
in_dir(@
|
21
|
+
in_dir(@vendor_repository_dir) do
|
22
22
|
run_command('git add *')
|
23
23
|
run_command('git commit -m "change default color"')
|
24
24
|
end
|
25
25
|
|
26
26
|
update_dir_from_fixture('skit1', 'skit1.2')
|
27
|
-
in_dir(@
|
27
|
+
in_dir(@vendor_repository_dir) do
|
28
28
|
run_command('git add *')
|
29
29
|
run_command('git commit -m "add a happy note"')
|
30
30
|
end
|
@@ -32,19 +32,19 @@ describe 'Updating a mirror' do
|
|
32
32
|
|
33
33
|
context 'with no project-specific changes' do
|
34
34
|
it 'should add the files and commit' do
|
35
|
-
in_dir(@
|
35
|
+
in_dir(@repository_dir) do
|
36
36
|
run_command("#{BRAID_BIN} update skit1")
|
37
37
|
end
|
38
38
|
|
39
|
-
|
39
|
+
assert_no_diff("#{FIXTURE_PATH}/skit1.2/#{@file_name}", "#{@repository_dir}/skit1/#{@file_name}")
|
40
40
|
|
41
41
|
output = run_command('git log --pretty=oneline').split("\n")
|
42
|
-
output.length.
|
43
|
-
output[0].
|
42
|
+
expect(output.length).to eq(3)
|
43
|
+
expect(output[0]).to match(/^[0-9a-f]{40} Braid: Update mirror 'skit1' to '[0-9a-f]{7}'$/)
|
44
44
|
|
45
45
|
# No temporary commits should be added to the reflog.
|
46
46
|
output = `git log -g --pretty=oneline`.split("\n")
|
47
|
-
output.length.
|
47
|
+
expect(output.length).to eq(3)
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
@@ -52,16 +52,16 @@ describe 'Updating a mirror' do
|
|
52
52
|
it 'should auto-merge and commit' do
|
53
53
|
run_command("cp #{File.join(FIXTURE_PATH, 'shiny_skit1_mergeable', @file_name)} #{File.join(TMP_PATH, 'shiny', 'skit1', @file_name)}")
|
54
54
|
|
55
|
-
in_dir(@
|
55
|
+
in_dir(@repository_dir) do
|
56
56
|
run_command("git commit -a -m 'mergeable change'")
|
57
57
|
run_command("#{BRAID_BIN} update skit1")
|
58
58
|
end
|
59
59
|
|
60
|
-
|
60
|
+
assert_no_diff("#{FIXTURE_PATH}/shiny_skit1.2_merged/#{@file_name}", "#{@repository_dir}/skit1/#{@file_name}")
|
61
61
|
|
62
62
|
output = run_command('git log --pretty=oneline').split("\n")
|
63
|
-
output.length.
|
64
|
-
output[0].
|
63
|
+
expect(output.length).to eq(4) # plus 'mergeable change'
|
64
|
+
expect(output[0]).to match(/Braid: Update mirror 'skit1' to '[0-9a-f]{7}'/)
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
@@ -70,16 +70,16 @@ describe 'Updating a mirror' do
|
|
70
70
|
run_command("cp #{File.join(FIXTURE_PATH, 'shiny_skit1_conflicting', @file_name)} #{File.join(TMP_PATH, 'shiny', 'skit1', @file_name)}")
|
71
71
|
|
72
72
|
target_revision = nil
|
73
|
-
in_dir(@
|
73
|
+
in_dir(@vendor_repository_dir) do
|
74
74
|
target_revision = run_command('git rev-parse HEAD')
|
75
75
|
end
|
76
76
|
|
77
77
|
braid_output = nil
|
78
|
-
in_dir(@
|
78
|
+
in_dir(@repository_dir) do
|
79
79
|
run_command("git commit -a -m 'conflicting change'")
|
80
80
|
braid_output = run_command("#{BRAID_BIN} update skit1")
|
81
81
|
end
|
82
|
-
braid_output.
|
82
|
+
expect(braid_output).to match(/Caught merge error\. Breaking\./)
|
83
83
|
|
84
84
|
run_command("grep -q '>>>>>>> #{target_revision}' #{File.join(TMP_PATH, 'shiny', 'skit1', @file_name)}")
|
85
85
|
end
|
@@ -88,11 +88,11 @@ describe 'Updating a mirror' do
|
|
88
88
|
# Regression test for https://github.com/cristibalan/braid/issues/41.
|
89
89
|
context 'with a convergent deletion' do
|
90
90
|
it 'should not detect a bogus rename' do
|
91
|
-
in_dir(@
|
91
|
+
in_dir(@vendor_repository_dir) do
|
92
92
|
run_command('git rm layouts/layout.liquid')
|
93
93
|
run_command('git commit -m "delete"')
|
94
94
|
end
|
95
|
-
in_dir(@
|
95
|
+
in_dir(@repository_dir) do
|
96
96
|
run_command('git rm skit1/layouts/layout.liquid')
|
97
97
|
run_command('git commit -m "delete here too"')
|
98
98
|
end
|
@@ -101,10 +101,52 @@ describe 'Updating a mirror' do
|
|
101
101
|
# think skit1/layouts/layout.liquid was renamed to
|
102
102
|
# other-skit/layout.liquid, resulting in a rename-delete conflict.
|
103
103
|
braid_output = nil
|
104
|
-
in_dir(@
|
104
|
+
in_dir(@repository_dir) do
|
105
105
|
braid_output = run_command("#{BRAID_BIN} update skit1")
|
106
106
|
end
|
107
|
-
braid_output.
|
107
|
+
expect(braid_output).not_to match(/Caught merge error\. Breaking\./)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
describe 'from a git repository with a braid into subdirectory' do
|
113
|
+
before do
|
114
|
+
@repository_dir = create_git_repo_from_fixture('shiny')
|
115
|
+
@vendor_repository_dir = create_git_repo_from_fixture('skit1')
|
116
|
+
@file_name = 'layouts/layout.liquid'
|
117
|
+
|
118
|
+
in_dir(@repository_dir) do
|
119
|
+
run_command("#{BRAID_BIN} add #{@vendor_repository_dir} --path layouts")
|
120
|
+
end
|
121
|
+
|
122
|
+
update_dir_from_fixture('skit1', 'skit1.1')
|
123
|
+
in_dir(@vendor_repository_dir) do
|
124
|
+
run_command('git add *')
|
125
|
+
run_command('git commit -m "change default color"')
|
126
|
+
end
|
127
|
+
|
128
|
+
update_dir_from_fixture('skit1', 'skit1.2')
|
129
|
+
in_dir(@vendor_repository_dir) do
|
130
|
+
run_command('git add *')
|
131
|
+
run_command('git commit -m "add a happy note"')
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
context 'with no project-specific changes' do
|
136
|
+
it 'should add the files and commit' do
|
137
|
+
in_dir(@repository_dir) do
|
138
|
+
run_command("#{BRAID_BIN} update skit1")
|
139
|
+
end
|
140
|
+
|
141
|
+
assert_no_diff("#{FIXTURE_PATH}/skit1.2/#{@file_name}", "#{@repository_dir}/skit1/layout.liquid")
|
142
|
+
|
143
|
+
output = run_command('git log --pretty=oneline').split("\n")
|
144
|
+
expect(output.length).to eq(3)
|
145
|
+
expect(output[0]).to match(/^[0-9a-f]{40} Braid: Update mirror 'skit1' to '[0-9a-f]{7}'$/)
|
146
|
+
|
147
|
+
# No temporary commits should be added to the reflog.
|
148
|
+
output = `git log -g --pretty=oneline`.split("\n")
|
149
|
+
expect(output.length).to eq(3)
|
108
150
|
end
|
109
151
|
end
|
110
152
|
end
|