evilchelu-braid 0.4.13 → 0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/README.textile +120 -0
- data/bin/braid +4 -1
- data/braid.gemspec +5 -6
- data/lib/braid.rb +1 -1
- data/lib/braid/command.rb +9 -1
- data/lib/braid/commands/add.rb +3 -5
- data/lib/braid/commands/diff.rb +2 -0
- data/lib/braid/commands/remove.rb +6 -2
- data/lib/braid/commands/setup.rb +2 -2
- data/lib/braid/commands/update.rb +14 -8
- data/lib/braid/operations.rb +10 -4
- data/test/integration/adding_test.rb +2 -2
- data/test/integration/updating_test.rb +2 -2
- data/test/integration_helper.rb +1 -0
- metadata +6 -7
- data/README.rdoc +0 -27
data/README.textile
ADDED
@@ -0,0 +1,120 @@
|
|
1
|
+
h1. Braid
|
2
|
+
|
3
|
+
Braid is a simple tool to help track git and svn vendor branches in a git repository.
|
4
|
+
|
5
|
+
The project homepage is at "http://github.com/evilchelu/braid/wikis/home":http://github.com/evilchelu/braid/wikis/home
|
6
|
+
|
7
|
+
h2. Requirements
|
8
|
+
|
9
|
+
* git 1.6+ (and git-svn if you want to mirror svn repositories)
|
10
|
+
* main >= 2.8.0
|
11
|
+
* open4 >= 0.9.6
|
12
|
+
|
13
|
+
h2. Installing using rubygems - official releases
|
14
|
+
|
15
|
+
gem install braid
|
16
|
+
|
17
|
+
h2. Installing using rubygems - development releases
|
18
|
+
|
19
|
+
gem sources -a http://gems.github.com
|
20
|
+
gem install evilchelu-braid
|
21
|
+
|
22
|
+
h2. Installing from source
|
23
|
+
|
24
|
+
git clone git://github.com/evilchelu/braid.git
|
25
|
+
cd braid
|
26
|
+
gem build braid.gemspec
|
27
|
+
sudo gem install braid-x.y.z.gem
|
28
|
+
|
29
|
+
h2. Quick usage - ruby project
|
30
|
+
|
31
|
+
Let's assume we're writing something like gitnub that needs grit in lib/grit. Initialize the repo (nothing braid related here):
|
32
|
+
|
33
|
+
git init gritty
|
34
|
+
cd gritty
|
35
|
+
touch README
|
36
|
+
git add README
|
37
|
+
git commit -m "initial commit"
|
38
|
+
|
39
|
+
Now let's vendor grit:
|
40
|
+
|
41
|
+
braid add git://github.com/mojombo/grit.git lib/grit
|
42
|
+
|
43
|
+
And you're done! Braid vendored grit into lib/grit. Feel free to inspect the changes with git log or git show.
|
44
|
+
|
45
|
+
If further down the line, you want to bring new changes from grit in your repository, just update the mirror:
|
46
|
+
|
47
|
+
braid update lib/grit
|
48
|
+
|
49
|
+
h2. Quick usage - rails project
|
50
|
+
|
51
|
+
Let's assume you want to start a new rails app called shiny. Initialize the repo (nothing braid related here):
|
52
|
+
|
53
|
+
git init shiny
|
54
|
+
cd shiny
|
55
|
+
touch README
|
56
|
+
git add README
|
57
|
+
git commit -m "initial commit"
|
58
|
+
|
59
|
+
Vendor rails (this might take a while because the rails repo is huge!):
|
60
|
+
|
61
|
+
braid add git://github.com/rails/rails.git vendor/rails
|
62
|
+
|
63
|
+
Create your new rails app (nothing braid related here):
|
64
|
+
|
65
|
+
ruby vendor/rails/railties/bin/rails .
|
66
|
+
git add .
|
67
|
+
git commit -m "rails ."
|
68
|
+
|
69
|
+
Add any plugins you might need:
|
70
|
+
|
71
|
+
braid add git://github.com/thoughtbot/shoulda.git -p
|
72
|
+
braid add git://github.com/thoughtbot/factory_girl.git -p
|
73
|
+
braid add git://github.com/mbleigh/subdomain-fu.git -p
|
74
|
+
|
75
|
+
And you're done! Braid vendored rails and your plugins. Feel free to inspect the changes with git log or git show.
|
76
|
+
|
77
|
+
If further down the line, you want to bring new changes from rails in your repository, just update the mirror:
|
78
|
+
|
79
|
+
braid update vendor/rails
|
80
|
+
|
81
|
+
Or, if you want all mirrors updated:
|
82
|
+
|
83
|
+
braid update
|
84
|
+
|
85
|
+
h2. More usage
|
86
|
+
|
87
|
+
Use the built in help system to find out about all commands and options:
|
88
|
+
|
89
|
+
braid help
|
90
|
+
braid help add # or braid add --help
|
91
|
+
|
92
|
+
You may also want to read "Usage and examples":http://github.com/evilchelu/braid/wikis/usage-and-examples.
|
93
|
+
|
94
|
+
h2. Troubleshooting
|
95
|
+
|
96
|
+
Check "Troubleshooting":http://github.com/evilchelu/braid/wikis/troubleshooting if you're having issues.
|
97
|
+
|
98
|
+
h2. Contributing
|
99
|
+
|
100
|
+
We appreciate any patches, error reports and usage ideas you may have. Please submit a lighthouse ticket or start a thread on the mailing list.
|
101
|
+
|
102
|
+
Bugs and feature requests: "*braid project on lighthouse*":http://evilchelu.lighthouseapp.com/projects/10600-braid
|
103
|
+
|
104
|
+
Discussions and community support: "*braid-gem google group*":http://groups.google.com/group/braid-gem
|
105
|
+
|
106
|
+
h2. Authors
|
107
|
+
|
108
|
+
* Cristi Balan (evilchelu)
|
109
|
+
* Norbert Crombach (norbert)
|
110
|
+
|
111
|
+
h2. Contributors (alphabetically)
|
112
|
+
|
113
|
+
* Alan Harper
|
114
|
+
* Christoph Sturm
|
115
|
+
* Dennis Muhlestein
|
116
|
+
* Ferdinand Svehla
|
117
|
+
* Michael Klishin
|
118
|
+
* Roman Heinrich
|
119
|
+
* Tyler Rick
|
120
|
+
|
data/bin/braid
CHANGED
@@ -106,7 +106,10 @@ Main {
|
|
106
106
|
|
107
107
|
mode(:setup) {
|
108
108
|
description <<-TXT
|
109
|
-
Set up git
|
109
|
+
Set up git or git-svn remote for a mirror.
|
110
|
+
All commands that need a remote run setup internally.
|
111
|
+
|
112
|
+
Defaults to setting up remotes for all mirrors if none is specified.
|
110
113
|
TXT
|
111
114
|
|
112
115
|
examples <<-TXT
|
data/braid.gemspec
CHANGED
@@ -1,21 +1,20 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = %q{braid}
|
3
|
-
s.version = "0.
|
3
|
+
s.version = "0.5"
|
4
4
|
|
5
5
|
s.specification_version = 2 if s.respond_to? :specification_version=
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Cristi Balan", "Norbert Crombach"]
|
9
|
-
s.date = %q{2008-10-
|
9
|
+
s.date = %q{2008-10-29}
|
10
10
|
s.default_executable = %q{braid}
|
11
11
|
s.description = %q{A simple tool for tracking vendor branches in git.}
|
12
12
|
s.email = %q{evil@che.lu}
|
13
13
|
s.executables = ["braid"]
|
14
|
-
s.
|
15
|
-
s.
|
16
|
-
s.has_rdoc = true
|
14
|
+
s.files = ["bin/braid", "braid.gemspec", "lib/braid/command.rb", "lib/braid/commands/add.rb", "lib/braid/commands/diff.rb", "lib/braid/commands/remove.rb", "lib/braid/commands/setup.rb", "lib/braid/commands/update.rb", "lib/braid/config.rb", "lib/braid/mirror.rb", "lib/braid/operations.rb", "lib/braid.rb", "LICENSE", "Rakefile", "README.textile", "test/braid_test.rb", "test/config_test.rb", "test/fixtures/shiny/README", "test/fixtures/skit1/layouts/layout.liquid", "test/fixtures/skit1/preview.png", "test/fixtures/skit1.1/layouts/layout.liquid", "test/fixtures/skit1.2/layouts/layout.liquid", "test/integration/adding_test.rb", "test/integration/updating_test.rb", "test/integration_helper.rb", "test/mirror_test.rb", "test/operations_test.rb", "test/test_helper.rb"]
|
15
|
+
s.has_rdoc = false
|
17
16
|
s.homepage = %q{http://evil.che.lu/projects/braid}
|
18
|
-
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "braid", "--main"
|
17
|
+
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "braid", "--main"]
|
19
18
|
s.require_paths = ["lib"]
|
20
19
|
s.rubyforge_project = %q{braid}
|
21
20
|
s.rubygems_version = %q{1.1.0}
|
data/lib/braid.rb
CHANGED
data/lib/braid/command.rb
CHANGED
@@ -23,7 +23,7 @@ module Braid
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def self.msg(str)
|
26
|
-
puts str
|
26
|
+
puts "Braid: #{str}"
|
27
27
|
end
|
28
28
|
|
29
29
|
def msg(str)
|
@@ -34,7 +34,15 @@ module Braid
|
|
34
34
|
@config ||= load_and_migrate_config
|
35
35
|
end
|
36
36
|
|
37
|
+
def verbose?
|
38
|
+
Braid.verbose
|
39
|
+
end
|
40
|
+
|
37
41
|
private
|
42
|
+
def setup_remote(mirror)
|
43
|
+
Command.run(:setup, mirror.path)
|
44
|
+
end
|
45
|
+
|
38
46
|
def use_local_cache?
|
39
47
|
Braid.use_local_cache
|
40
48
|
end
|
data/lib/braid/commands/add.rb
CHANGED
@@ -30,15 +30,13 @@ module Braid
|
|
30
30
|
config.update(mirror)
|
31
31
|
add_config_file
|
32
32
|
|
33
|
-
commit_message = "
|
33
|
+
commit_message = "Added mirror '#{mirror.path}' at #{display_revision(mirror)}"
|
34
|
+
|
34
35
|
git.commit(commit_message)
|
36
|
+
msg commit_message
|
35
37
|
end
|
36
38
|
end
|
37
39
|
|
38
|
-
private
|
39
|
-
def setup_remote(mirror)
|
40
|
-
Command.run(:setup, mirror.path)
|
41
|
-
end
|
42
40
|
end
|
43
41
|
end
|
44
42
|
end
|
data/lib/braid/commands/diff.rb
CHANGED
@@ -7,15 +7,19 @@ module Braid
|
|
7
7
|
bail_on_local_changes!
|
8
8
|
|
9
9
|
with_reset_on_error do
|
10
|
-
msg "Removing mirror from '#{mirror.path}
|
10
|
+
msg "Removing mirror from '#{mirror.path}'."
|
11
11
|
|
12
12
|
git.rm_r(mirror.path)
|
13
13
|
|
14
|
+
# will need this in case we decide to remove the .git/config entry also
|
15
|
+
# setup_remote(mirror)
|
16
|
+
|
14
17
|
config.remove(mirror)
|
15
18
|
add_config_file
|
16
19
|
|
17
|
-
commit_message = "
|
20
|
+
commit_message = "Removed mirror '#{mirror.path}'"
|
18
21
|
git.commit(commit_message)
|
22
|
+
msg commit_message
|
19
23
|
end
|
20
24
|
end
|
21
25
|
end
|
data/lib/braid/commands/setup.rb
CHANGED
@@ -17,11 +17,11 @@ module Braid
|
|
17
17
|
mirror = config.get!(path)
|
18
18
|
|
19
19
|
if git.remote_url(mirror.remote)
|
20
|
-
msg "Mirror '#{mirror.path}
|
20
|
+
msg "Setup: Mirror '#{mirror.path}' already has a remote. Reusing it." if verbose?
|
21
21
|
return
|
22
22
|
end
|
23
23
|
|
24
|
-
msg "
|
24
|
+
msg "Setup: Creating remote for '#{mirror.path}'."
|
25
25
|
unless mirror.type == "svn"
|
26
26
|
url = use_local_cache? ? git_cache.path(mirror.url) : mirror.url
|
27
27
|
git.remote_add(mirror.remote, url, mirror.branch)
|
@@ -21,24 +21,29 @@ module Braid
|
|
21
21
|
def update_one(path, options = {})
|
22
22
|
mirror = config.get!(path)
|
23
23
|
|
24
|
+
revision_message = options["revision"] ? " to #{display_revision(mirror, options["revision"])}" : ""
|
25
|
+
msg "Updating mirror '#{mirror.path}'#{revision_message}."
|
26
|
+
|
24
27
|
# check options for lock modification
|
25
28
|
if mirror.locked?
|
26
29
|
if options["head"]
|
27
|
-
msg "Unlocking mirror '#{mirror.path}
|
30
|
+
msg "Unlocking mirror '#{mirror.path}'." if verbose?
|
28
31
|
mirror.lock = nil
|
29
32
|
elsif !options["revision"]
|
30
|
-
msg "Mirror '#{mirror.path}
|
33
|
+
msg "Mirror '#{mirror.path}' is locked to #{display_revision(mirror, mirror.lock)}. Use --head to force."
|
31
34
|
return
|
32
35
|
end
|
33
36
|
end
|
34
37
|
|
38
|
+
setup_remote(mirror)
|
39
|
+
msg "Fetching new commits for '#{mirror.path}'." if verbose?
|
35
40
|
mirror.fetch
|
36
41
|
|
37
42
|
new_revision = validate_new_revision(mirror, options["revision"])
|
38
43
|
target_revision = determine_target_revision(mirror, new_revision)
|
39
44
|
|
40
45
|
if mirror.merged?(target_revision)
|
41
|
-
msg "Mirror '#{mirror.path}
|
46
|
+
msg "Mirror '#{mirror.path}' is already up to date."
|
42
47
|
return
|
43
48
|
end
|
44
49
|
|
@@ -50,7 +55,7 @@ module Braid
|
|
50
55
|
mirror.revision = new_revision
|
51
56
|
mirror.lock = new_revision if options["revision"]
|
52
57
|
|
53
|
-
msg "
|
58
|
+
msg "Merging in mirror '#{mirror.path}'." if verbose?
|
54
59
|
begin
|
55
60
|
if mirror.squashed?
|
56
61
|
local_hash = git.rev_parse("HEAD")
|
@@ -73,20 +78,21 @@ module Braid
|
|
73
78
|
config.update(mirror)
|
74
79
|
add_config_file
|
75
80
|
|
76
|
-
commit_message = "
|
81
|
+
commit_message = "Updated mirror '#{mirror.path}' to #{display_revision(mirror)}"
|
77
82
|
|
78
83
|
if error
|
79
84
|
File.open(".git/MERGE_MSG", 'w') { |f| f.puts(commit_message) }
|
80
85
|
return
|
81
|
-
else
|
82
|
-
git.commit(commit_message)
|
83
86
|
end
|
87
|
+
|
88
|
+
git.commit(commit_message)
|
89
|
+
msg commit_message
|
84
90
|
end
|
85
91
|
|
86
92
|
def generate_tree_hash(mirror, revision)
|
87
93
|
git.rm_r(mirror.path)
|
88
94
|
git.read_tree_prefix(revision, mirror.path)
|
89
|
-
success = git.commit("Temporary commit for mirror '#{mirror.path}
|
95
|
+
success = git.commit("Temporary commit for mirror '#{mirror.path}'")
|
90
96
|
hash = git.rev_parse("HEAD")
|
91
97
|
git.reset_hard("HEAD^") if success
|
92
98
|
hash
|
data/lib/braid/operations.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'singleton'
|
2
2
|
require 'rubygems'
|
3
3
|
require 'open4'
|
4
|
+
require 'tempfile'
|
4
5
|
|
5
6
|
module Braid
|
6
7
|
module Operations
|
@@ -118,13 +119,13 @@ module Braid
|
|
118
119
|
def sh(cmd, message = nil)
|
119
120
|
message ||= "could not fetch" if cmd =~ /fetch/
|
120
121
|
log(cmd)
|
121
|
-
|
122
|
-
raise ShellExecutionError, message unless
|
122
|
+
`#{cmd}`
|
123
|
+
raise ShellExecutionError, message unless $?.exitstatus == 0
|
123
124
|
true
|
124
125
|
end
|
125
126
|
|
126
127
|
def msg(str)
|
127
|
-
puts str
|
128
|
+
puts "Braid: #{str}"
|
128
129
|
end
|
129
130
|
|
130
131
|
def log(cmd)
|
@@ -138,7 +139,12 @@ module Braid
|
|
138
139
|
|
139
140
|
class Git < Proxy
|
140
141
|
def commit(message, *args)
|
141
|
-
|
142
|
+
|
143
|
+
commit_message_file = Tempfile.new("braid_commit", ".")
|
144
|
+
commit_message_file.print("Braid: " + message)
|
145
|
+
commit_message_file.flush
|
146
|
+
status, out, err = exec("git commit -F #{commit_message_file.path} --no-verify #{args.join(' ')}")
|
147
|
+
commit_message_file.unlink
|
142
148
|
|
143
149
|
if status == 0
|
144
150
|
true
|
@@ -24,7 +24,7 @@ describe "Adding a mirror in a clean repository" do
|
|
24
24
|
|
25
25
|
output = `git log --pretty=oneline`.split("\n")
|
26
26
|
output.length.should == 2
|
27
|
-
output[0].should =~
|
27
|
+
output[0].should =~ /Braid: Added mirror 'skit1' at '[0-9a-f]{7}'/
|
28
28
|
end
|
29
29
|
|
30
30
|
it "should create .braids and add the mirror to it" do
|
@@ -59,7 +59,7 @@ describe "Adding a mirror in a clean repository" do
|
|
59
59
|
|
60
60
|
output = `git log --pretty=oneline`.split("\n")
|
61
61
|
output.length.should == 2
|
62
|
-
output[0].should =~
|
62
|
+
output[0].should =~ /Braid: Added mirror 'skit1' at r1/
|
63
63
|
end
|
64
64
|
|
65
65
|
it "should create .braids and add the mirror to it" do
|
@@ -41,7 +41,7 @@ describe "Updating a mirror without conflicts" do
|
|
41
41
|
|
42
42
|
output = `git log --pretty=oneline`.split("\n")
|
43
43
|
output.length.should == 3
|
44
|
-
output[0].should =~ /
|
44
|
+
output[0].should =~ /Braid: Updated mirror 'skit1' to '[0-9a-f]{7}'/
|
45
45
|
end
|
46
46
|
|
47
47
|
end
|
@@ -79,7 +79,7 @@ describe "Updating a mirror without conflicts" do
|
|
79
79
|
|
80
80
|
output = `git log --pretty=oneline`.split("\n")
|
81
81
|
output.length.should == 3
|
82
|
-
output[0].should =~
|
82
|
+
output[0].should =~ /Braid: Updated mirror 'skit1' to r3/
|
83
83
|
end
|
84
84
|
|
85
85
|
end
|
data/test/integration_helper.rb
CHANGED
@@ -9,6 +9,7 @@ require 'pathname'
|
|
9
9
|
TMP_PATH = File.join(Dir.tmpdir, "braid_integration")
|
10
10
|
BRAID_PATH = Pathname.new(File.dirname(__FILE__)).parent.realpath
|
11
11
|
FIXTURE_PATH = File.join(BRAID_PATH, "test", "fixtures")
|
12
|
+
FileUtils.rm_rf(TMP_PATH)
|
12
13
|
FileUtils.mkdir_p(TMP_PATH)
|
13
14
|
BRAID_BIN = File.join(BRAID_PATH, "bin", "braid")
|
14
15
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: evilchelu-braid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: "0.5"
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cristi Balan
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2008-10-
|
13
|
+
date: 2008-10-29 00:00:00 -07:00
|
14
14
|
default_executable: braid
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -37,8 +37,8 @@ executables:
|
|
37
37
|
- braid
|
38
38
|
extensions: []
|
39
39
|
|
40
|
-
extra_rdoc_files:
|
41
|
-
|
40
|
+
extra_rdoc_files: []
|
41
|
+
|
42
42
|
files:
|
43
43
|
- bin/braid
|
44
44
|
- braid.gemspec
|
@@ -54,7 +54,7 @@ files:
|
|
54
54
|
- lib/braid.rb
|
55
55
|
- LICENSE
|
56
56
|
- Rakefile
|
57
|
-
- README.
|
57
|
+
- README.textile
|
58
58
|
- test/braid_test.rb
|
59
59
|
- test/config_test.rb
|
60
60
|
- test/fixtures/shiny/README
|
@@ -68,7 +68,7 @@ files:
|
|
68
68
|
- test/mirror_test.rb
|
69
69
|
- test/operations_test.rb
|
70
70
|
- test/test_helper.rb
|
71
|
-
has_rdoc:
|
71
|
+
has_rdoc: false
|
72
72
|
homepage: http://evil.che.lu/projects/braid
|
73
73
|
post_install_message:
|
74
74
|
rdoc_options:
|
@@ -77,7 +77,6 @@ rdoc_options:
|
|
77
77
|
- --title
|
78
78
|
- braid
|
79
79
|
- --main
|
80
|
-
- README.rdoc
|
81
80
|
require_paths:
|
82
81
|
- lib
|
83
82
|
required_ruby_version: !ruby/object:Gem::Requirement
|
data/README.rdoc
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
= braid
|
2
|
-
A simple tool for tracking vendor branches in git.
|
3
|
-
|
4
|
-
http://evil.che.lu/projects/braid/
|
5
|
-
|
6
|
-
== Requirements
|
7
|
-
|
8
|
-
You will need git 1.5.4.5 or higher to run this version.
|
9
|
-
|
10
|
-
== Installation
|
11
|
-
|
12
|
-
git clone git://github.com/evilchelu/braid.git
|
13
|
-
cd braid
|
14
|
-
gem build braid.gemspec
|
15
|
-
sudo gem install braid-x.y.z.gem
|
16
|
-
|
17
|
-
== Usage
|
18
|
-
|
19
|
-
braid help
|
20
|
-
braid help COMMANDNAME
|
21
|
-
|
22
|
-
For more usage examples and documentation check the project wiki at http://github.com/evilchelu/braid/wikis.
|
23
|
-
Also see the bug tracker at http://evilchelu.lighthouseapp.com/projects/10600-braid for current issues and future plans.
|
24
|
-
|
25
|
-
== Contributing
|
26
|
-
|
27
|
-
If you want to send a patch please fork the project on GitHub and send a pull request.
|