submodule 0.0.1

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.
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in submodule.gemspec
4
+ gemspec
@@ -0,0 +1,21 @@
1
+ # submodule
2
+
3
+ Small gem to simplify building process of gems with git submodules. Tended to be used for ruby gems which wrap js libraries or another assets
4
+
5
+ ## Usage
6
+
7
+ Install gem or add it to `Gemfile` then put in your `Rakefile`:
8
+
9
+ ```ruby
10
+ require 'submodule'
11
+ class SomeSubmodule < Submodule::Task
12
+ def test
13
+ # run tests of submodule
14
+ end
15
+
16
+ def after_pull
17
+ # do something
18
+ end
19
+ end
20
+ SomeSubmodule.new
21
+ ```
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,158 @@
1
+ require "submodule/version"
2
+
3
+ require "rake/tasklib"
4
+ require "inifile"
5
+
6
+ module Submodule
7
+ class Task < ::Rake::TaskLib
8
+
9
+ attr_reader :path
10
+
11
+ def initialize
12
+ @cwd = Dir.pwd
13
+
14
+ base = File.basename Dir["*.gemspec"][0], ".gemspec"
15
+ if base[0]
16
+ base = File.basename Dir["*.gemspec"][0], ".gemspec"
17
+ @version_file = "lib/#{base}/version.rb"
18
+ end
19
+
20
+ gitmodules = IniFile.new('./.gitmodules').to_h
21
+ @path = gitmodules[gitmodules.keys.first]["path"]
22
+ @submodule_name = gitmodules.keys.first
23
+ .gsub('submodule ', '')
24
+ .gsub('"', '')
25
+ .gsub('vendor/', '')
26
+ @github = gitmodules[gitmodules.keys.first]["url"]
27
+ .gsub('https://github.com/', '')
28
+ .gsub('.git', '')
29
+ define
30
+ end
31
+
32
+ def test
33
+ p "define tests in test function"
34
+ end
35
+
36
+ def after_pull
37
+ p "after pull"
38
+ end
39
+
40
+ private
41
+
42
+ def define
43
+ desc "Update, test and commit submodule #{@submodule_name}"
44
+ task "submodule:update" do
45
+ git_update
46
+ cd path
47
+ hash_before = git_hash
48
+ git_pull
49
+ hash_after = git_hash
50
+ if hash_before == hash_after
51
+ abort "submodule #{@submodule_name} already up-to-date"
52
+ end
53
+ test
54
+ update_version hash_after
55
+ cd @cwd
56
+ git_add
57
+ after_pull
58
+ git_commit hash_after
59
+ end
60
+ desc "Test submodule #{@submodule_name}"
61
+ task "submodule:test" do
62
+ git_update
63
+ cd path
64
+ test
65
+ cd @cwd
66
+ end
67
+ self
68
+ end
69
+
70
+ def git_update
71
+ sh "git submodule update --init --recursive"
72
+ end
73
+
74
+ # def my_sh cmd
75
+ # puts cmd
76
+ # res = `#{cmd}`
77
+ # if $? != 0
78
+ # abort "Running `#{cmd}' failed. Run this command directly for more detailed output"
79
+ # end
80
+ # res
81
+ # end
82
+
83
+ def git_pull
84
+ sh "git clean -f"
85
+ sh "git checkout master"
86
+ sh "git pull"
87
+ # res = my_sh "git pull"
88
+ # if res =~ /Already up-to-date/
89
+ # p res
90
+ # abort "submodule #{@submodule_name} already up-to-date"
91
+ # end
92
+ end
93
+
94
+ def git_hash
95
+ `git rev-parse --verify HEAD`.strip
96
+ # http://git-scm.com/book/en/ch2-3.html Table 2-1
97
+ # {
98
+ # hash: `git rev-parse --verify HEAD`.strip,
99
+ # short_hash: ` git log -1 --pretty=format:"%h"`,
100
+ # commit_date: ` git log -1 --pretty=format:"%cd"`,
101
+ # comment: ` git log -1 --pretty=format:"%s"`
102
+ # }
103
+ end
104
+
105
+ def git_add
106
+ sh "git add " + path
107
+ sh "git add " + @version_file
108
+ end
109
+
110
+ def version_path
111
+ File.expand_path(@version_file, @cwd)
112
+ end
113
+
114
+ def version_regexp val = "(.*)", re = true
115
+ str = "VERSION = \"#{val}\""
116
+ if re
117
+ Regexp.new str.gsub(" ", "\s*")
118
+ else
119
+ str
120
+ end
121
+ end
122
+
123
+ def submodule_regexp val = "(.*)", re = true
124
+ str = "SUBMODULE = \"#{val}\""
125
+ if re
126
+ Regexp.new str.gsub(" ", "\s*")
127
+ else
128
+ str
129
+ end
130
+ end
131
+
132
+ def update_version hash
133
+ if File.file? version_path
134
+ version_info = File.read version_path
135
+ version_number = version_regexp.match(version_info)[1]
136
+ version_number = version_number.split('.')
137
+ # TODO not update if current version not commited yet
138
+ version_number[2] = version_number[2].to_i + 1
139
+ version_number = version_number.join('.')
140
+
141
+ version_info.gsub! version_regexp, version_regexp(version_number, false)
142
+ version_info.gsub! submodule_regexp, submodule_regexp(hash, false)
143
+
144
+ File.open version_path, "w" do |f|
145
+ f.write version_info
146
+ end
147
+ else
148
+ p "no version file"
149
+ end
150
+ end
151
+
152
+ def git_commit hash
153
+ message = "update #{@submodule_name} to #{@github}@#{hash}"
154
+ sh "git commit -m \"#{message}\""
155
+ end
156
+
157
+ end
158
+ end
@@ -0,0 +1,3 @@
1
+ module Submodule
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "submodule/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "submodule"
7
+ s.version = Submodule::VERSION
8
+ s.authors = ["stereobooster"]
9
+ s.email = ["stereobooster@gmail.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{Small gem to simplify building process of gems with git submodules}
12
+ s.description = %q{Small gem to simplify building process of gems with git submodules. Tended to be used for ruby gems which wrap js libraries or another assets}
13
+
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
+ s.require_paths = ["lib"]
18
+
19
+ s.add_dependency "rake"
20
+ s.add_dependency "inifile"
21
+ end
metadata ADDED
@@ -0,0 +1,96 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: submodule
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - stereobooster
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2012-05-07 00:00:00 +03:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rake
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 0
30
+ version: "0"
31
+ type: :runtime
32
+ version_requirements: *id001
33
+ - !ruby/object:Gem::Dependency
34
+ name: inifile
35
+ prerelease: false
36
+ requirement: &id002 !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
43
+ version: "0"
44
+ type: :runtime
45
+ version_requirements: *id002
46
+ description: Small gem to simplify building process of gems with git submodules. Tended to be used for ruby gems which wrap js libraries or another assets
47
+ email:
48
+ - stereobooster@gmail.com
49
+ executables: []
50
+
51
+ extensions: []
52
+
53
+ extra_rdoc_files: []
54
+
55
+ files:
56
+ - .gitignore
57
+ - Gemfile
58
+ - README.md
59
+ - Rakefile
60
+ - lib/submodule.rb
61
+ - lib/submodule/version.rb
62
+ - submodule.gemspec
63
+ has_rdoc: true
64
+ homepage: ""
65
+ licenses: []
66
+
67
+ post_install_message:
68
+ rdoc_options: []
69
+
70
+ require_paths:
71
+ - lib
72
+ required_ruby_version: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ segments:
78
+ - 0
79
+ version: "0"
80
+ required_rubygems_version: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ segments:
86
+ - 0
87
+ version: "0"
88
+ requirements: []
89
+
90
+ rubyforge_project:
91
+ rubygems_version: 1.3.7
92
+ signing_key:
93
+ specification_version: 3
94
+ summary: Small gem to simplify building process of gems with git submodules
95
+ test_files: []
96
+