bulb 0.3.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +21 -2
- data/app/controllers/bulb/blob_controller.rb +3 -1
- data/app/controllers/bulb/tree_controller.rb +3 -1
- data/app/helpers/bulb/application_helper.rb +27 -0
- data/app/models/bulb/group.rb +2 -0
- data/app/models/bulb/repository.rb +9 -4
- data/app/validators/bulb/unexisting_validator.rb +9 -0
- data/app/views/bulb/blob/show.html.erb +16 -3
- data/app/views/bulb/tree/show.html.erb +2 -0
- data/db/migrate/20220116171708_add_unique_index_on_slugs.rb +6 -0
- data/lib/bulb/engine.rb +2 -0
- data/lib/bulb/version.rb +1 -1
- data/lib/bulb.rb +1 -0
- metadata +19 -6
- data/app/mailers/bulb/application_mailer.rb +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c7dbedd43a634514f1bf09c0bb403e0b58ae53581ba15b2efb53912524f75d68
|
4
|
+
data.tar.gz: 664df5f0802b66a6da0ac6fffb8b83c2863c248b04cc3885fdbb3b43734f2384
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a6993095967f81af611273989c1f5a8e04288d031f6d31a3bdfdb13c7221d55d862ffbf4ef64b15ff63b8d1ce456cc90395508624db7ec7830aca5de1f1e250d
|
7
|
+
data.tar.gz: af58dea6f761f1641dc32a4d2655df044187585c80c74bb3e59456b0fb4a6b2190de42d4810ef1204bf65f90d6c27ebc3969639d8d61e537732f4a87f27eb13b
|
data/README.md
CHANGED
@@ -24,8 +24,15 @@ $ bundle
|
|
24
24
|
|
25
25
|
## Usage
|
26
26
|
|
27
|
-
Once installed, you
|
28
|
-
|
27
|
+
Once installed, you need to generate the needed migrations to
|
28
|
+
create the tables and migrate your database:
|
29
|
+
|
30
|
+
```bash
|
31
|
+
$ rake bulb:install:migrations
|
32
|
+
$ rake db:migrate
|
33
|
+
```
|
34
|
+
|
35
|
+
Then, you can mount the engine to whichever path you like:
|
29
36
|
|
30
37
|
```ruby
|
31
38
|
mount Bulb::Engine => "/git"
|
@@ -34,6 +41,18 @@ mount Bulb::Engine => "/git"
|
|
34
41
|
Then your repositories will be available through `/git/:group-slug/:slug`
|
35
42
|
like `/git/sites/personal`.
|
36
43
|
|
44
|
+
To configure where your repositories are stored and who own them, you can
|
45
|
+
open your `config/application.rb` or any environment-specific file and add
|
46
|
+
the following:
|
47
|
+
|
48
|
+
```ruby
|
49
|
+
config.bulb.repositories_path = '/srv/git/'
|
50
|
+
config.bulb.repositories_owner = 'git'
|
51
|
+
```
|
52
|
+
|
53
|
+
Where `git` is a Unix user on your system that must be the owner of the
|
54
|
+
repository folders.
|
55
|
+
|
37
56
|
## License
|
38
57
|
|
39
58
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
@@ -5,8 +5,10 @@ module Bulb
|
|
5
5
|
|
6
6
|
def show
|
7
7
|
@git_repository = @repository.git_repository
|
8
|
-
|
9
8
|
@blob_hash = @git_repository.head.target.tree.path(params[:path])
|
9
|
+
|
10
|
+
redirect_to repository_tree_path if @blob_hash[:type] == :tree
|
11
|
+
|
10
12
|
@blob = @git_repository.lookup(@blob_hash[:oid])
|
11
13
|
end
|
12
14
|
end
|
@@ -5,8 +5,10 @@ module Bulb
|
|
5
5
|
|
6
6
|
def show
|
7
7
|
@git_repository = @repository.git_repository
|
8
|
-
|
9
8
|
tree_hash = @git_repository.head.target.tree.path(params[:path])
|
9
|
+
|
10
|
+
redirect_to repository_blob_path if tree_hash[:type] == :blob
|
11
|
+
|
10
12
|
@tree = @git_repository.lookup(tree_hash[:oid])
|
11
13
|
end
|
12
14
|
end
|
@@ -9,5 +9,32 @@ module Bulb
|
|
9
9
|
root = root ? (root + "/") : ""
|
10
10
|
bulb.repository_blob_path(reference: 'master', path: root + name)
|
11
11
|
end
|
12
|
+
|
13
|
+
def breadcrumb
|
14
|
+
parts = params[:path].split("/")
|
15
|
+
last = parts.pop
|
16
|
+
|
17
|
+
reference = params[:reference]
|
18
|
+
group_slug = params[:group_slug]
|
19
|
+
slug = params[:slug]
|
20
|
+
|
21
|
+
elements = []
|
22
|
+
|
23
|
+
elements << content_tag(:li) do
|
24
|
+
link_to @repository.slug, bulb.repository_path(group_slug, slug)
|
25
|
+
end
|
26
|
+
|
27
|
+
parts.each_with_index do |part, index|
|
28
|
+
path = parts[0..index].join("/")
|
29
|
+
|
30
|
+
elements << content_tag(:li) do
|
31
|
+
link_to part, bulb.repository_tree_path(reference: reference, path: path)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
elements << content_tag(:li, last)
|
36
|
+
|
37
|
+
content_tag(:ul, elements.join.html_safe, class: 'breadcrumb')
|
38
|
+
end
|
12
39
|
end
|
13
40
|
end
|
data/app/models/bulb/group.rb
CHANGED
@@ -6,6 +6,9 @@ module Bulb
|
|
6
6
|
|
7
7
|
before_create :create_git_repository
|
8
8
|
|
9
|
+
validates_uniqueness_of :slug, scope: :bulb_group_id
|
10
|
+
validates :fs_repository_path, 'bulb/unexisting': true, on: :create
|
11
|
+
|
9
12
|
def git_repository
|
10
13
|
@git_repository ||= Rugged::Repository.new(fs_repository_path)
|
11
14
|
end
|
@@ -14,17 +17,19 @@ module Bulb
|
|
14
17
|
def create_git_repository
|
15
18
|
full_path = fs_repository_path
|
16
19
|
|
17
|
-
raise RuntimeError.new if File.exist?(full_path)
|
18
|
-
|
19
20
|
FileUtils.mkdir_p(full_path)
|
20
21
|
Rugged::Repository.init_at(full_path, :bare)
|
22
|
+
|
23
|
+
if (owner = Bulb.repositories_owner).present?
|
24
|
+
FileUtils.chown_R(owner, owner, full_path)
|
25
|
+
end
|
21
26
|
end
|
22
27
|
|
23
28
|
def fs_repository_path
|
24
29
|
if group.nil?
|
25
|
-
File.join(Bulb.repositories_path, slug)
|
30
|
+
File.join(Bulb.repositories_path, "#{slug}.git")
|
26
31
|
else
|
27
|
-
File.join(Bulb.repositories_path, group.slug, slug)
|
32
|
+
File.join(Bulb.repositories_path, group.slug, "#{slug}.git")
|
28
33
|
end
|
29
34
|
end
|
30
35
|
end
|
@@ -1,3 +1,16 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
<%= breadcrumb %>
|
2
|
+
|
3
|
+
<% unless @blob.binary? %>
|
4
|
+
<div class="blob highlight">
|
5
|
+
<%= raw highlight_blob @blob_hash[:name], @blob.content.force_encoding(Encoding::UTF_8) %>
|
6
|
+
</div>
|
7
|
+
<% else %>
|
8
|
+
<div class="blob">
|
9
|
+
<% match = @blob_hash[:name].match(/\.(jpg|jpeg|png|gif)$/) %>
|
10
|
+
<% if match %>
|
11
|
+
<img src="data:image/<%= match[1] %>;base64,<%= Base64.strict_encode64(@blob.content) %>">
|
12
|
+
<% else %>
|
13
|
+
Nothing to display.
|
14
|
+
<% end %>
|
15
|
+
</div>
|
16
|
+
<% end %>
|
data/lib/bulb/engine.rb
CHANGED
data/lib/bulb/version.rb
CHANGED
data/lib/bulb.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bulb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robin Dupret
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-09-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -17,6 +17,9 @@ dependencies:
|
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 6.1.4
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '7.0'
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -24,20 +27,29 @@ dependencies:
|
|
24
27
|
- - ">="
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: 6.1.4
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '7.0'
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: rugged
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
30
36
|
requirements:
|
31
37
|
- - "~>"
|
32
38
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1.
|
39
|
+
version: '1.6'
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 1.6.3
|
34
43
|
type: :runtime
|
35
44
|
prerelease: false
|
36
45
|
version_requirements: !ruby/object:Gem::Requirement
|
37
46
|
requirements:
|
38
47
|
- - "~>"
|
39
48
|
- !ruby/object:Gem::Version
|
40
|
-
version: 1.
|
49
|
+
version: '1.6'
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 1.6.3
|
41
53
|
- !ruby/object:Gem::Dependency
|
42
54
|
name: rouge
|
43
55
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,10 +98,10 @@ files:
|
|
86
98
|
- app/helpers/bulb/application_helper.rb
|
87
99
|
- app/helpers/bulb/text_helper.rb
|
88
100
|
- app/jobs/bulb/application_job.rb
|
89
|
-
- app/mailers/bulb/application_mailer.rb
|
90
101
|
- app/models/bulb/application_record.rb
|
91
102
|
- app/models/bulb/group.rb
|
92
103
|
- app/models/bulb/repository.rb
|
104
|
+
- app/validators/bulb/unexisting_validator.rb
|
93
105
|
- app/views/bulb/blob/show.html.erb
|
94
106
|
- app/views/bulb/repositories/show.html.erb
|
95
107
|
- app/views/bulb/tree/_blob.html.erb
|
@@ -99,6 +111,7 @@ files:
|
|
99
111
|
- config/routes.rb
|
100
112
|
- db/migrate/20210809182658_create_bulb_groups.rb
|
101
113
|
- db/migrate/20210809182912_create_bulb_repositories.rb
|
114
|
+
- db/migrate/20220116171708_add_unique_index_on_slugs.rb
|
102
115
|
- lib/bulb.rb
|
103
116
|
- lib/bulb/engine.rb
|
104
117
|
- lib/bulb/version.rb
|
@@ -122,7 +135,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
122
135
|
- !ruby/object:Gem::Version
|
123
136
|
version: '0'
|
124
137
|
requirements: []
|
125
|
-
rubygems_version: 3.
|
138
|
+
rubygems_version: 3.4.12
|
126
139
|
signing_key:
|
127
140
|
specification_version: 4
|
128
141
|
summary: A Rails engine to deal with Git repositories
|