braid 0.7.1 → 1.0.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.
- checksums.yaml +7 -0
- data/.gitignore +4 -1
- data/.ruby-version +1 -0
- data/.travis.yml +7 -0
- data/CONTRIBUTING.md +26 -0
- data/Gemfile +1 -2
- data/LICENSE +3 -1
- data/README.md +90 -51
- data/Rakefile +6 -14
- data/bin/braid +9 -37
- data/braid.gemspec +11 -11
- data/lib/braid.rb +13 -12
- data/lib/braid/command.rb +9 -42
- data/lib/braid/commands/add.rb +6 -8
- data/lib/braid/commands/list.rb +11 -6
- data/lib/braid/commands/push.rb +5 -5
- data/lib/braid/commands/remove.rb +1 -3
- data/lib/braid/commands/setup.rb +4 -8
- data/lib/braid/commands/update.rb +12 -14
- data/lib/braid/config.rb +38 -43
- data/lib/braid/mirror.rb +19 -63
- data/lib/braid/operations.rb +51 -90
- data/lib/braid/version.rb +1 -1
- data/{test/config_test.rb → spec/config_spec.rb} +14 -17
- data/{test → spec}/fixtures/shiny/README +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/{test → spec}/fixtures/skit1/layouts/layout.liquid +0 -0
- data/{test → spec}/fixtures/skit1/preview.png +0 -0
- data/spec/integration/adding_spec.rb +43 -0
- data/{test/integration/updating_test.rb → spec/integration/updating_spec.rb} +2 -41
- data/spec/integration_helper.rb +47 -0
- data/{test/mirror_test.rb → spec/mirror_spec.rb} +6 -33
- data/{test/operations_test.rb → spec/operations_spec.rb} +2 -2
- data/{test → spec}/test_helper.rb +6 -2
- metadata +86 -123
- data/lib/core_ext.rb +0 -13
- data/test/braid_test.rb +0 -7
- data/test/integration/adding_test.rb +0 -80
- data/test/integration_helper.rb +0 -70
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 7df51db130d90c8981f291576c229352aa01ab7f
|
4
|
+
data.tar.gz: 1306a0ac5f768a442cce4c6d3ed21b64f1994f28
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8a15d53e0873009b3c70b0d553d1e8d9f76887ad01a0b66062af19e6223f7ba7e704b07c3d1ed9a22277197f8a39e88a53d9054419751804affef1a8631aaf9d
|
7
|
+
data.tar.gz: 89750c09fe1a371e247fcf24fb9ecaa245e8d4ab28ad3e4e040d29e67c892114476045aa3c2898afcbee36df0f11a6d126930e1cdc4abe7a6810e51c0d00c87b
|
data/.gitignore
CHANGED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.1.3
|
data/.travis.yml
ADDED
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# How to Contribute
|
2
|
+
|
3
|
+
Pull requests are greatly appreciated and are what makes opensource great. Here's a quick guide:
|
4
|
+
|
5
|
+
* Fork it
|
6
|
+
* Create your feature branch (`git checkout -b my-new-feature`)
|
7
|
+
* Commit your changes (`git commit -am 'Add some feature'`)
|
8
|
+
* Push to the branch (`git push origin my-new-feature`)
|
9
|
+
* Create new Pull Request
|
10
|
+
|
11
|
+
Pester us if we don't get your Pull Requests merged in a timely fashion. :)
|
12
|
+
|
13
|
+
## How to speed the merging of pull requests
|
14
|
+
|
15
|
+
* Describe your changes in the CHANGELOG.
|
16
|
+
* Give yourself some credit in the appropriate place (usually the CHANGELOG).
|
17
|
+
* Make commits of logical units.
|
18
|
+
* Ensure your commit messages help others understand what you are doing and why.
|
19
|
+
* Check for unnecessary whitespace with `git diff --check` before committing.
|
20
|
+
* Maintain the same code style.
|
21
|
+
* Maintain the same level of test coverage or improve it.
|
22
|
+
|
23
|
+
## Additional Resources
|
24
|
+
|
25
|
+
* [General GitHub documentation](http://help.github.com/)
|
26
|
+
* [GitHub pull request documentation](http://help.github.com/send-pull-requests/)
|
data/Gemfile
CHANGED
data/LICENSE
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
Copyright (c) 2007-
|
1
|
+
Copyright (c) 2007-2008 Cristi Balan
|
2
|
+
Copyright (c) 2008-2015 Norbert Crombach
|
3
|
+
Copyright (c) 2013-2015 Peter Donald
|
2
4
|
|
3
5
|
Permission is hereby granted, free of charge, to any person obtaining
|
4
6
|
a copy of this software and associated documentation files (the
|
data/README.md
CHANGED
@@ -1,32 +1,59 @@
|
|
1
1
|
# Braid
|
2
2
|
|
3
|
-
Braid is a simple tool to help track
|
3
|
+
Braid is a simple tool to help track vendor branches in a
|
4
|
+
[Git](http://git-scm.com/) repository.
|
4
5
|
|
5
|
-
|
6
|
+
## Motivation
|
6
7
|
|
7
|
-
|
8
|
+
Vendoring allows you take the source code of an external library and ensure it's
|
9
|
+
version controlled along with the main project. This is in contrast to including
|
10
|
+
a reference to a packaged version of an external library that is available in a
|
11
|
+
binary artifact repository such as Maven Central, RubyGems or NPM.
|
8
12
|
|
9
|
-
|
10
|
-
|
11
|
-
|
13
|
+
Vendoring is useful when you need to patch or customize the external libraries
|
14
|
+
or the external library is expected to co-evolve with the main project. The
|
15
|
+
developer can make changes to the main project and patch the library in a single
|
16
|
+
commit.
|
12
17
|
|
13
|
-
|
18
|
+
The problem arises when the external library makes changes that you want to
|
19
|
+
integrate into your local vendored version or the developer makes changes to the
|
20
|
+
local version that they want integrated into the external library.
|
14
21
|
|
15
|
-
|
22
|
+
A typical "implementation" of vendoring is to simply download or checkout the
|
23
|
+
source for the external library, remove the `.git` or `.svn` directories and
|
24
|
+
commit it to the main source tree. However this approach makes it very difficult
|
25
|
+
to update the library. When you want to update the library do you re-apply your
|
26
|
+
local changes onto a new copy of the vendored library or do you re-apply the
|
27
|
+
changes from the external library to local version? Both cases involve manual
|
28
|
+
generation and application of patch files to source trees.
|
29
|
+
|
30
|
+
This is where Braid comes into play. Braid makes it easy to vendor in remote git
|
31
|
+
repositories and use an automated mechanism for updating the external library
|
32
|
+
and generating patches to upgrade the external library.
|
33
|
+
|
34
|
+
Braid creates a file `.braids` in the root of your repository that contains
|
35
|
+
references to external libraries or mirrors. There are two types of mirrors in
|
36
|
+
Braid: squashed and full. Mirrors are squashed by default, which is what you'll
|
37
|
+
generally want because they're faster and don't pollute your history with
|
38
|
+
commits from the mirrors.
|
16
39
|
|
17
|
-
|
40
|
+
Full mirrors are useful when you want to view imported history in your own
|
41
|
+
project. You usually want this if the mirror is also a repository you have
|
42
|
+
access to, for example, when using shared code across projects.
|
18
43
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
44
|
+
Please note that you cannot change between mirror types after the initial add.
|
45
|
+
You'll have to remove the mirror and add it again.
|
46
|
+
|
47
|
+
## Installation
|
48
|
+
|
49
|
+
gem install braid
|
23
50
|
|
24
51
|
## Quick usage - ruby project
|
25
52
|
|
26
|
-
Let's assume we're writing
|
53
|
+
Let's assume we're writing the project `myproject` that needs grit in lib/grit. Initialize the repo (nothing braid related here):
|
27
54
|
|
28
|
-
git init
|
29
|
-
cd
|
55
|
+
git init myproject
|
56
|
+
cd myproject
|
30
57
|
touch README
|
31
58
|
git add README
|
32
59
|
git commit -m "initial commit"
|
@@ -37,71 +64,83 @@ Now let's vendor grit:
|
|
37
64
|
|
38
65
|
And you're done! Braid vendored grit into lib/grit. Feel free to inspect the changes with git log or git show.
|
39
66
|
|
40
|
-
If further down the line, you want to bring new changes from grit
|
67
|
+
If further down the line, you want to bring new changes from grit into your repository, just update the mirror:
|
41
68
|
|
42
69
|
braid update lib/grit
|
43
70
|
|
44
|
-
|
71
|
+
If you make changes to the grit library and want to generate a patch file so that you can submit the patch file
|
72
|
+
to the grit project:
|
45
73
|
|
46
|
-
|
74
|
+
braid diff lib/grit > grit.patch
|
47
75
|
|
48
|
-
|
49
|
-
cd shiny
|
50
|
-
touch README
|
51
|
-
git add README
|
52
|
-
git commit -m "initial commit"
|
76
|
+
Once those changes have been applied to grit you probably want to update your local version of grit again.
|
53
77
|
|
54
|
-
|
78
|
+
braid update lib/grit
|
55
79
|
|
56
|
-
|
80
|
+
## More usage
|
57
81
|
|
58
|
-
|
82
|
+
Use the built in help system to find out about all commands and options:
|
83
|
+
|
84
|
+
braid help
|
85
|
+
braid help add # or braid add --help
|
86
|
+
|
87
|
+
### Examples
|
59
88
|
|
60
|
-
|
61
|
-
git add .
|
62
|
-
git commit -m "rails ."
|
89
|
+
#### Adding a mirror
|
63
90
|
|
64
|
-
|
91
|
+
braid add git://github.com/rails/rails.git vendor/rails
|
65
92
|
|
66
|
-
|
67
|
-
braid add git://github.com/thoughtbot/factory_girl.git -p
|
68
|
-
braid add git://github.com/mbleigh/subdomain-fu.git -p
|
93
|
+
#### Adding mirrors with revisions
|
69
94
|
|
70
|
-
|
95
|
+
braid add --revision bf1b1e0 git://github.com/rails/rails.git vendor/rails
|
71
96
|
|
72
|
-
|
97
|
+
#### Adding mirrors with full history
|
73
98
|
|
74
|
-
braid
|
99
|
+
braid add --full git://github.com/mislav/will_paginate.git vendor/plugins/will_paginate
|
75
100
|
|
76
|
-
|
101
|
+
#### Updating mirrors
|
77
102
|
|
103
|
+
# Update a specific mirror
|
104
|
+
braid update vendor/plugins/cache_fu
|
105
|
+
# Update all mirrors
|
78
106
|
braid update
|
79
107
|
|
80
|
-
|
108
|
+
#### Updating mirrors with conflicts
|
81
109
|
|
82
|
-
|
110
|
+
If a braid update creates a conflict, braid will stop execution and leave the partially committed
|
111
|
+
files in your working copy, just like a normal git merge conflict would.
|
83
112
|
|
84
|
-
|
85
|
-
|
113
|
+
You will then have to resolve all conflicts and manually run `git commit`. The commit message is
|
114
|
+
already prepared.
|
115
|
+
|
116
|
+
If you want to cancel the braid update and the merge, you'll have to reset your working copy and
|
117
|
+
index with `git reset --hard`.
|
118
|
+
|
119
|
+
#### Locking and unlocking mirrors
|
86
120
|
|
87
|
-
|
121
|
+
braid update --revision 6c1c16b vendor/rails
|
122
|
+
braid update --head vendor/rails
|
88
123
|
|
89
|
-
|
124
|
+
#### Showing local changes made to mirrors
|
90
125
|
|
91
|
-
|
126
|
+
braid diff vendor/rails
|
92
127
|
|
93
128
|
## Contributing
|
94
129
|
|
95
|
-
We appreciate any patches, error reports and usage ideas you may have. Please
|
130
|
+
We appreciate any patches, error reports and usage ideas you may have. Please
|
131
|
+
submit an issue or pull request on GitHub.
|
96
132
|
|
97
|
-
|
133
|
+
### Subversion
|
98
134
|
|
99
|
-
|
135
|
+
While preparing to release Braid v1.0 the support for subversion repositories was removed as
|
136
|
+
there was no active maintainers and inadequate test coverage. If there is anyone motivated to
|
137
|
+
re-add and maintain the Subversion support, please contact the authors.
|
100
138
|
|
101
|
-
|
139
|
+
# Authors
|
102
140
|
|
103
|
-
|
104
|
-
|
141
|
+
* Cristi Balan
|
142
|
+
* Norbert Crombach
|
143
|
+
* Peter Donald
|
105
144
|
|
106
145
|
## Contributors (alphabetically)
|
107
146
|
|
data/Rakefile
CHANGED
@@ -2,19 +2,11 @@ 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
10
|
|
19
|
-
|
20
|
-
|
11
|
+
desc "Test and package the gem"
|
12
|
+
task :default => [:spec, :build]
|
data/bin/braid
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
$LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) +
|
3
|
+
$LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + '/../lib'))
|
4
4
|
require 'braid'
|
5
5
|
|
6
6
|
require 'rubygems'
|
@@ -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,19 +36,15 @@ 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
|
-
mixin :argument_url, :
|
43
|
+
mixin :argument_url, :optional_path, :option_branch, :option_revision, :option_full, :option_verbose
|
55
44
|
|
56
45
|
run {
|
57
46
|
Braid.verbose = verbose
|
58
|
-
Braid::Command.run(:add, url, {
|
47
|
+
Braid::Command.run(:add, url, {'path' => path, 'branch' => branch, 'revision' => revision, 'full' => full})
|
59
48
|
}
|
60
49
|
}
|
61
50
|
|
@@ -79,7 +68,7 @@ Main {
|
|
79
68
|
|
80
69
|
run {
|
81
70
|
Braid.verbose = verbose
|
82
|
-
Braid::Command.run(:update, path, {
|
71
|
+
Braid::Command.run(:update, path, {'revision' => revision, 'head' => head})
|
83
72
|
}
|
84
73
|
}
|
85
74
|
|
@@ -89,7 +78,7 @@ Main {
|
|
89
78
|
|
90
79
|
* removes metadata from .braids
|
91
80
|
* removes the local directory and commits the removal
|
92
|
-
* removes the git remote by default, --keep can be used to
|
81
|
+
* removes the git remote by default, --keep can be used to suppress that
|
93
82
|
TXT
|
94
83
|
|
95
84
|
examples <<-TXT
|
@@ -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
|
@@ -184,15 +173,6 @@ Main {
|
|
184
173
|
}
|
185
174
|
}
|
186
175
|
|
187
|
-
mixin(:option_type) {
|
188
|
-
option(:type, :t) {
|
189
|
-
optional
|
190
|
-
argument :required
|
191
|
-
desc 'mirror type'
|
192
|
-
attr
|
193
|
-
}
|
194
|
-
}
|
195
|
-
|
196
176
|
mixin(:option_branch) {
|
197
177
|
option(:branch, :b) {
|
198
178
|
optional
|
@@ -202,14 +182,6 @@ Main {
|
|
202
182
|
}
|
203
183
|
}
|
204
184
|
|
205
|
-
mixin(:option_rails_plugin) {
|
206
|
-
option(:rails_plugin, :p) {
|
207
|
-
optional
|
208
|
-
desc 'added mirror is a Rails plugin'
|
209
|
-
attr
|
210
|
-
}
|
211
|
-
}
|
212
|
-
|
213
185
|
mixin(:option_revision) {
|
214
186
|
option(:revision, :r) {
|
215
187
|
optional
|
data/braid.gemspec
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
$:.push File.expand_path(
|
2
|
+
$:.push File.expand_path('../lib', __FILE__)
|
3
3
|
require 'braid/version'
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
@@ -7,27 +7,27 @@ Gem::Specification.new do |s|
|
|
7
7
|
s.version = Braid::VERSION
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
9
|
|
10
|
-
s.authors = [
|
11
|
-
s.email = %q{evil@che.lu}
|
10
|
+
s.authors = ['Cristi Balan', 'Norbert Crombach', 'Peter Donald']
|
11
|
+
s.email = %q{evil@che.lu norbert.crombach@primetheory.org peter@realityforge.org}
|
12
12
|
|
13
|
-
s.homepage = %q{
|
13
|
+
s.homepage = %q{https://github.com/cristibalan/braid}
|
14
14
|
s.summary = %q{A simple tool for tracking vendor branches in git.}
|
15
15
|
s.description = %q{A simple tool for tracking vendor branches in git.}
|
16
16
|
|
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
|
-
s.require_paths =
|
23
|
+
s.require_paths = %w(lib)
|
24
24
|
|
25
25
|
s.has_rdoc = false
|
26
|
-
s.rdoc_options =
|
26
|
+
s.rdoc_options = %w(--line-numbers --inline-source --title braid --main)
|
27
27
|
|
28
|
-
s.add_dependency(%q<main>, [
|
29
|
-
s.add_dependency(%q<open4>, [
|
28
|
+
s.add_dependency(%q<main>, ['>= 4.7.3'])
|
29
|
+
s.add_dependency(%q<open4>, ['>= 1.0.1']) unless defined?(JRUBY_VERSION)
|
30
30
|
|
31
|
-
s.add_development_dependency(%q<
|
32
|
-
s.add_development_dependency(%q<mocha>, [
|
31
|
+
s.add_development_dependency(%q<rspec>, ['= 2.12.0'])
|
32
|
+
s.add_development_dependency(%q<mocha>, ['>= 0.9.11'])
|
33
33
|
end
|