git-lighttp 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +21 -0
  3. data/README.md +90 -0
  4. data/README.pt-BR.md +96 -0
  5. data/doc/releases/{v0.1.0.rdoc → v0.1.0.md} +4 -4
  6. data/doc/releases/{v0.2.0.rdoc → v0.2.0.md} +3 -5
  7. data/doc/releases/{v0.3.0.rdoc → v0.3.0.md} +3 -3
  8. data/doc/releases/v0.3.1.md +12 -0
  9. data/git-lighttp.gemspec +34 -21
  10. data/lib/git/lighttp.rb +100 -97
  11. data/lib/git/lighttp/extensions.rb +26 -30
  12. data/lib/git/lighttp/http_backend.rb +20 -20
  13. data/lib/git/lighttp/treeish.rb +2 -2
  14. data/lib/git/lighttp/version.rb +3 -3
  15. metadata +79 -71
  16. data/Gemfile +0 -11
  17. data/Makefile +0 -41
  18. data/README.pt-BR.rdoc +0 -81
  19. data/README.rdoc +0 -75
  20. data/Rakefile +0 -50
  21. data/test/all.rb +0 -12
  22. data/test/config_test.rb +0 -43
  23. data/test/fixtures/config.yml +0 -13
  24. data/test/fixtures/htgroup +0 -3
  25. data/test/fixtures/htpasswd +0 -4
  26. data/test/fixtures/mycode.git/HEAD +0 -1
  27. data/test/fixtures/mycode.git/config +0 -4
  28. data/test/fixtures/mycode.git/description +0 -1
  29. data/test/fixtures/mycode.git/hooks/applypatch-msg.sample +0 -15
  30. data/test/fixtures/mycode.git/hooks/commit-msg.sample +0 -24
  31. data/test/fixtures/mycode.git/hooks/post-commit.sample +0 -8
  32. data/test/fixtures/mycode.git/hooks/post-receive.sample +0 -15
  33. data/test/fixtures/mycode.git/hooks/post-update.sample +0 -8
  34. data/test/fixtures/mycode.git/hooks/pre-applypatch.sample +0 -14
  35. data/test/fixtures/mycode.git/hooks/pre-commit.sample +0 -46
  36. data/test/fixtures/mycode.git/hooks/pre-rebase.sample +0 -169
  37. data/test/fixtures/mycode.git/hooks/prepare-commit-msg.sample +0 -36
  38. data/test/fixtures/mycode.git/hooks/update.sample +0 -128
  39. data/test/fixtures/mycode.git/info/exclude +0 -6
  40. data/test/fixtures/mycode.git/info/refs +0 -3
  41. data/test/fixtures/mycode.git/objects/02/83eb96425444e17b97182e1ba9f216cc67c132 +0 -0
  42. data/test/fixtures/mycode.git/objects/03/9927042df267a1bc606fc4485b7a79b6a9e3cd +0 -1
  43. data/test/fixtures/mycode.git/objects/0d/eed0a56fa8f5f2a788d58b3ea235afd547b828 +0 -2
  44. data/test/fixtures/mycode.git/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904 +0 -0
  45. data/test/fixtures/mycode.git/objects/5e/54a0767e0c380f3baab17938d68c7f464cf171 +0 -1
  46. data/test/fixtures/mycode.git/objects/63/9b96262e7e19ca2169575e797b234098b8a72e +0 -0
  47. data/test/fixtures/mycode.git/objects/71/6e9568eed27d5ee4378b3ecf6dd095a547bde9 +0 -1
  48. data/test/fixtures/mycode.git/objects/b6/f3f0fabeaaaaf2db22b8ef98f59115baec7ef9 +0 -0
  49. data/test/fixtures/mycode.git/objects/be/118435b9d908fd4a689cd8b0cc98059911a31a +0 -0
  50. data/test/fixtures/mycode.git/objects/db/aefcb5bde664671c73b99515c386dcbc7f22b6 +0 -0
  51. data/test/fixtures/mycode.git/objects/eb/669b878d2013ac70aa5dee75e6357ea81d16ea +0 -0
  52. data/test/fixtures/mycode.git/objects/ed/10cfcf72862e140c97fe899cba2a55f4cb4c20 +0 -0
  53. data/test/fixtures/mycode.git/objects/ed/1c3a255ab3fce056dc31cd82df9f61a4d9fa22 +0 -0
  54. data/test/fixtures/mycode.git/objects/info/alternates +0 -0
  55. data/test/fixtures/mycode.git/objects/info/http-alternates +0 -0
  56. data/test/fixtures/mycode.git/objects/info/packs +0 -2
  57. data/test/fixtures/mycode.git/objects/pack/pack-40a8636b62258fffd78ec1e8d254116e72d385a9.idx +0 -0
  58. data/test/fixtures/mycode.git/objects/pack/pack-40a8636b62258fffd78ec1e8d254116e72d385a9.pack +0 -0
  59. data/test/fixtures/mycode.git/packed-refs +0 -4
  60. data/test/fixtures/mycode.git/refs/heads/master +0 -1
  61. data/test/fixtures/mycode.git/refs/tags/v0.1.0 +0 -1
  62. data/test/helpers.rb +0 -53
  63. data/test/htgroup_test.rb +0 -29
  64. data/test/htpasswd_test.rb +0 -63
  65. data/test/http_backend_authentication_test.rb +0 -61
  66. data/test/http_backend_test.rb +0 -123
  67. data/test/project_handler_test.rb +0 -45
  68. data/test/treeish_test.rb +0 -33
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c42b6bc5a9164165905fec6ee9a64e010d18cd52
4
- data.tar.gz: 6886a3e0b6f059e483b43c4e1c34541fbba8976b
3
+ metadata.gz: f2163ddb50b5ced5e4bcb6fdc020f29751d53a63
4
+ data.tar.gz: a8023e7eb5264c37566ae375605adaba5a7f93db
5
5
  SHA512:
6
- metadata.gz: dc3f5819df08305540b53233b4159c47dab26b73c5fe6f7b238303b27dae7496f397d61e1f06a4f8cd4e71d603e76ae97729dfa2534a8b3b612a7f4c287833ca
7
- data.tar.gz: 4eaec72837984539df8bc799f7eb0a1f42c69bdfc2e552e780297dc374cdad305489c33ee649e7f5a53e8c1c09212a2dda680d220c8312371da9b9867bd571b6
6
+ metadata.gz: 1f8e79c04657f04213d7063657a078e3a1b8be0e7c4ac0449620da5964cb4f2eb1b593c663ee7a104c105334dfc06b33ecf39aba2abedce05fde2a98089eb49b
7
+ data.tar.gz: af3321617dfd01fb433d9b82335cd7d0753409fb5a03ced2fcc04491fe7517f51233ab742be504600e027d174c6a14c392565369d59769fbef966edcd59f6feb
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2011-2016 Hallison Batista
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,90 @@
1
+ # Git-Lighttp - Web light end smarty for Git
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/git-lighttp.svg)](https://badge.fury.io/rb/git-lighttp)
4
+ [![Build Status](https://travis-ci.org/hallison/git-lighttp.svg?branch=master)](https://travis-ci.org/hallison/git-lighttp)
5
+ [![Code Climate](https://codeclimate.com/github/hallison/git-lighttp/badges/gpa.svg)](https://codeclimate.com/github/hallison/git-lighttp)
6
+ [![Inline docs](http://inch-ci.org/github/hallison/git-lighttp.svg?branch=master)](http://inch-ci.org/github/hallison/git-lighttp)
7
+
8
+ ## DESCRIPTION
9
+
10
+ This project was inspired in the [Grack][1] Smart-HTTP server handler (written
11
+ by [Scott Chacon][2]) but developed using [Sinatra][3] and aims replace the
12
+ original `git-http-backend` including new features.
13
+
14
+ The main goal of the **Git-Lighttp** is implement the following useful features.
15
+
16
+ - Smart-HTTP, based on _git-http-backend_.
17
+ - Authentication flexible based on database or configuration file like `htpasswd`.
18
+ - Authorization flexible based on database or configuration file like `htgroup`.
19
+ - API to get information about repository (_Treeish_).
20
+
21
+ ## SINOPSIS
22
+
23
+ Install the Git-Lighttp using [Rubygems][4].
24
+
25
+ $ gem install git-lighttp
26
+
27
+ Or checkout the project hosted on [Gitlab][5] or [Github][6].
28
+
29
+ $ git clone https://gitlab.com/hallison/git-lighttp.git
30
+ $ ...
31
+ $ cd git-lighttp
32
+ $ make install
33
+
34
+ Configure the Rackup file (`config.ru`) using the following instructions:
35
+
36
+ # config.ru
37
+ require "git/lighttp"
38
+
39
+ Git::Lighttp::HttpBackend.configure do |server|
40
+ server.project_root = "/home/git/repositories"
41
+ server.git_path = "/usr/bin/git"
42
+ server.get_any_file = true
43
+ server.upload_pack = true
44
+ server.receive_pack = false
45
+ server.authenticate = true
46
+ end
47
+
48
+ run Git::Lighttp::HttpBackend
49
+
50
+ And run:
51
+
52
+ $ rackup --port 9092 --daemonize
53
+ $ git clone http://localhost:9092/mycode.git
54
+
55
+ You can use the `.netrc` for improve your connection. Put this:
56
+
57
+ machine <host> login <username> password <password>
58
+
59
+ The Git-Lighttp is under development, so there are still many improvements to
60
+ be made. Please, help us to improve the project sending your feedback to
61
+ [issues][7] or sending email to [hallisonbatista@gmail.com][8].
62
+
63
+ Discuss in [Google Groups][9].
64
+
65
+ ## AUTHORS
66
+
67
+ Written by Hallison Batista <hallisonbatista@gmail.com>.
68
+
69
+ ## BUGS
70
+
71
+ If you find a bug, please report it at the Git-Lighttp project's
72
+ issues tracker on [Gitlab][5] or [Github][6].
73
+
74
+ ## LICENSE
75
+
76
+ Git-Lighttp is Copyright (c) 2011-2016 Hallison Batista.
77
+
78
+ This is free software, and may be redistributed under the terms specified in
79
+ LICENSE.txt.
80
+
81
+ [1]: http://github.com/schacon/grack
82
+ [2]: http://github.com/schacon
83
+ [3]: http://www.sinatrarb.com
84
+ [4]: http://rubygems.org/gems/git-lighttp
85
+ [5]: http://gitlab.com/hallison/git-lighttp
86
+ [6]: http://github.com/hallison/git-lighttp
87
+ [7]: http://gitlab.com/hallison/git-lighttp/issues
88
+ [8]: mailto:hallisonbatista@gmail.com
89
+ [9]: http://groups.google.com/group/git-lighttp
90
+
@@ -0,0 +1,96 @@
1
+ # Git-Lighttp - Web mais leve e esperta para o Git
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/git-lighttp.svg)](https://badge.fury.io/rb/git-lighttp)
4
+ [![Build Status](https://travis-ci.org/hallison/git-lighttp.svg?branch=master)](https://travis-ci.org/hallison/git-lighttp)
5
+ [![Code Climate](https://codeclimate.com/github/hallison/git-lighttp/badges/gpa.svg)](https://codeclimate.com/github/hallison/git-lighttp)
6
+ [![Inline docs](http://inch-ci.org/github/hallison/git-lighttp.svg?branch=master)](http://inch-ci.org/github/hallison/git-lighttp)
7
+
8
+ ## DESCRIÇÃO
9
+
10
+ Este projeto foi inspirado no [Grack][1], um servidor de processos Smart-HTTP
11
+ (escrito por [Scott Chacon][2], mas projetado usando [Sinatra][3] e visa
12
+ substituir o `git-http-backend` original incluindo novas funcionalidades.
13
+
14
+ O objetivo principal do **Git-Lighttp** é implementar as seguintes
15
+ funcionalidades:
16
+
17
+ - Smart-HTTP, baseado no _git-http-backend_.
18
+ - Autenticação flexível baseado em banco de dados ou arquivo de configuração
19
+ como `htpasswd`.
20
+ - Autorização básica baseado em banco de dados ou arquivo de configuração
21
+ como o `htgroup`.
22
+ - API para obter informações sobre o repositório (_Treeish_).
23
+
24
+ ## SINOPSE
25
+
26
+ Instale o Git-Lighttp usando [Rubygems][4].
27
+
28
+ $ gem install git-lighttp
29
+
30
+ Ou faça um _checkout_ do projeto hospedado no [Gitlab][5] ou no [Github][6].
31
+
32
+ $ git clone https://gitlab.com/hallison/git-lighttp.git
33
+ ...
34
+ $ cd git-lighttp
35
+ $ make install
36
+
37
+ Configure o arquivo Rackup (+config.ru+) usando as seguintes instruções:
38
+
39
+ # config.ru
40
+ require "git/lighttp"
41
+
42
+ Git::Lighttp::HttpBackend.configure do |server|
43
+ server.project_root = "/home/git/repositories"
44
+ server.git_path = "/usr/bin/git"
45
+ server.get_any_file = true
46
+ server.upload_pack = true
47
+ server.receive_pack = false
48
+ server.authenticate = true
49
+ end
50
+
51
+ run Git::Lighttp::HttpBackend
52
+
53
+ E execute:
54
+
55
+ $ rackup --port 9092 --daemonize
56
+ $ git clone http://localhost:9092/mycode.git
57
+
58
+ Você poderá usar o arquivo `.netrc` para melhorar sua conexão. Coloque
59
+ isso:
60
+
61
+ machine <servidor> login <usuario> password <senha>
62
+
63
+ O Git-Lighttp está em desenvolvimento, então ainda há muitas melhorias a serem
64
+ feitas. Por favor, nos ajude a melhorar o projeto enviando seu comentário nos
65
+ [problemas][7] encontrados ou enviando um email para
66
+ [hallisonbatista@gmail.com][8].
67
+
68
+ Discuta no [Google Groups][9].
69
+
70
+ ## AUTORES
71
+
72
+ Escrito por Hallison Batista <hallisonbatista@gmail.com>.
73
+
74
+ ## ERROS
75
+
76
+ Se você encontrar um erro, por favor, informe no
77
+ gerenciador de erros do projeto
78
+ Git-Lighttp no [Gitlab][5] ou no [Github][6].
79
+
80
+ ## LICENÇA
81
+
82
+ Git-Lighttp é Copyright (c) 2011-2016 Hallison Batista.
83
+
84
+ Este é um _software_ livre e pode ser redistribuído sob os termos
85
+ especificados em LICENSE.txt.
86
+
87
+ [1]: http://github.com/schacon/grack
88
+ [2]: http://github.com/schacon
89
+ [3]: http://www.sinatrarb.com
90
+ [4]: http://rubygems.org/gems/git-lighttp
91
+ [5]: http://gitlab.com/hallison/git-lighttp
92
+ [6]: http://github.com/hallison/git-lighttp
93
+ [7]: http://gitlab.com/hallison/git-lighttp/issues
94
+ [8]: mailto:hallisonbatista@gmail.com
95
+ [9]: http://groups.google.com/group/git-lighttp
96
+
@@ -1,11 +1,11 @@
1
- == Git-Lighttp v0.1.0
1
+ Git-Lighttp v0.1.0
2
+ ------------------
2
3
 
3
4
  Implementation of the basic features:
4
5
 
5
6
  - Smart-HTTP implementation.
6
- - Authentication using +htpasswd+ features (only crypt algorithm).
7
+ - Authentication using `htpasswd` features (only crypt algorithm).
7
8
  - Basic configuration in Rackup file.
8
9
 
9
10
  This is a beta version. For more informations about this release,
10
- please visit <http://github.com/hallison/git-lighttp>.
11
-
11
+ please visit <http://gitlab.com/hallison/git-lighttp>.
@@ -1,4 +1,5 @@
1
- == Git-Lighttp v0.2.0
1
+ Git-Lighttp v0.2.0
2
+ ------------------
2
3
 
3
4
  Implementation of viewer for browsing of source code:
4
5
 
@@ -18,7 +19,4 @@ Implementation of viewer for browsing of source code:
18
19
  - Small improvements in helpers and tests.
19
20
 
20
21
  This is a beta version. For more informations about this release,
21
- please visit <http://github.com/codigorama/git-lighttp>.
22
-
23
-
24
-
22
+ please visit <http://gitlab.com/hallison/git-lighttp>.
@@ -1,4 +1,5 @@
1
- == Git-Lighttp v0.3.0
1
+ Git-Lighttp v0.3.0
2
+ ------------------
2
3
 
3
4
  Improvements and new features.
4
5
 
@@ -9,5 +10,4 @@ Improvements and new features.
9
10
  - The project renamed from Git-Webby to Git-Lighttp.
10
11
 
11
12
  This is a beta version. For more informations about this release,
12
- please visit <http://github.com/hallison/git-lighttp>.
13
-
13
+ please visit <http://gitlab.com/hallison/git-lighttp>.
@@ -0,0 +1,12 @@
1
+ Git-Lighttp v0.3.1
2
+ ------------------
3
+
4
+ Improvements.
5
+
6
+ - Documentation improved using Markdown.
7
+ - Code improved using Rubocop.
8
+ - Fixes in tests and configurations (Travis CI, Gitlab CI).
9
+ - Gemspec improved and cleaned.
10
+
11
+ This is a beta version. For more informations about this release,
12
+ please visit <http://gitlab.com/hallison/git-lighttp>.
@@ -1,25 +1,38 @@
1
- require "git/lighttp"
1
+ $LOAD_PATH.unshift 'lib' unless $LOAD_PATH.include? 'lib'
2
2
 
3
- Gem::Specification.new do |spec|
4
- spec.platform = Gem::Platform::RUBY
5
- spec.name = "git-lighttp"
6
- spec.summary = "Git Web implementation of the Light (Smart) HTTP and other features"
7
- spec.authors = ["Hallison Batista"]
8
- spec.email = "hallisonbatista@gmail.com"
9
- spec.homepage = "http://github.com/hallison/git-lighttp"
10
- spec.rubyforge_project = spec.name
11
- spec.version = Git::Lighttp::VERSION
12
- spec.date = Git::Lighttp::RELEASE
13
- spec.test_files = spec.files.select{ |path| path =~ /^test\/.*/ }
14
- spec.require_paths = ["lib"]
15
- spec.files = %x[git ls-files].split.reject do |out|
16
- out =~ %r{^\.} || out =~ %r{/^doc/api/}
3
+ require 'git/lighttp/version'
4
+
5
+ Gem::Specification.new do |g|
6
+ g.platform = Gem::Platform::RUBY
7
+ g.name = 'git-lighttp'
8
+ g.summary = 'Git Web implementation of the Light (Smart) HTTP'
9
+ g.authors = ['Hallison Batista']
10
+ g.email = 'hallisonbatista@gmail.com'
11
+ g.homepage = 'https://gitlab.com/hallison/git-lighttp'
12
+ g.version = Git::Lighttp::VERSION
13
+ g.date = Git::Lighttp::RELEASE
14
+ g.licenses = ['MIT']
15
+
16
+ g.test_files = g.files.select do |path|
17
+ path =~ %r{^test/.*}
17
18
  end
18
- spec.description = <<-end.gsub /^ /,''
19
- Git::Lighttp is a implementation of the several features:
20
- - Smart HTTP which works like as git-http-backend.
21
- - Show info pages about the projects.
19
+
20
+ g.files = %x(git ls-files).split.reject do |out|
21
+ ignore = out =~ /([MR]ake|Gem)file/ || out =~ /^\./
22
+ ignore = ignore || out =~ %r{^doc/api} || out =~ %r{^test/.*}
23
+ ignore
22
24
  end
23
- spec.add_dependency "sinatra"
24
- end
25
+ g.description = <<-end
26
+ Git::Lighttp is a implementation of the several features:
27
+ - Smart HTTP which works like as git-http-backend.
28
+ - Show info pages about the projects.
29
+ end
30
+ g.add_dependency 'sinatra', '~> 1.4'
31
+ g.add_dependency 'json', '~> 1.8'
32
+
33
+ g.add_development_dependency 'minitest', '~> 5.8'
34
+ g.add_development_dependency 'minitest-rg', '~> 5.2'
35
+ g.add_development_dependency 'rack-test', '~> 0.6'
25
36
 
37
+ g.require_paths = ['lib']
38
+ end
@@ -1,34 +1,32 @@
1
1
  # Standard requirements
2
- require "yaml"
2
+ require 'yaml'
3
3
 
4
4
  # 3rd part requirements
5
- require "sinatra/base"
6
- require "json"
5
+ require 'sinatra/base'
6
+ require 'json'
7
7
 
8
8
  # Internal requirements
9
- require "git/lighttp/extensions"
10
- require "git/lighttp/version"
9
+ require 'git/lighttp/extensions'
10
+ require 'git/lighttp/version'
11
11
 
12
- # See <b>Git::Lighttp</b> for documentation.
12
+ # See *Git::Lighttp* for documentation.
13
13
  module Git
14
-
15
- # The main goal of the <b>Git::Lighttp</b> is implement the following useful
16
- # features.
14
+ # Module wich implements the following features:
17
15
  #
18
- # - Smart-HTTP, based on _git-http-backend_.
19
- # - Authentication flexible based on database or configuration file like <tt>.htpasswd</tt>.
16
+ # - Smart-HTTP, based on +git-http-backend+.
17
+ # - Authentication flexible based on database or configuration file like
18
+ # +.htpasswd+.
20
19
  # - API to get information about repository.
21
20
  #
22
- # This class configure the needed variables used by application. See
23
- # Config::DEFAULTS for the values will be initialized by default.
24
- #
21
+ # This class configure the needed variables used by application.
22
+ #
25
23
  # Basically, the +default+ attribute set the values that will be necessary
26
24
  # by all applications.
27
25
  #
28
- # The HTTP-Backend application is configured by +http_backend+ attribute
29
- # to set the Git RCP CLI. More details about this feature, see the
30
- # {git-http-backend official
31
- # page}[http://www.kernel.org/pub/software/scm/git/docs/git-http-backend.html]
26
+ # The HTTP-Backend application is configured by +http_backend+ attribute to
27
+ # set the Git RCP CLI. More details about this feature, see
28
+ # +git-http-backend+ {official
29
+ # page}[http://www.kernel.org/pub/software/scm/git/docs/git-http-backend.html].
32
30
  #
33
31
  # For tree view (JSON API) just use the attribute +treeish+.
34
32
  #
@@ -36,36 +34,34 @@ module Git
36
34
  # Default configuration. All attributes will be used by all modular
37
35
  # applications.
38
36
  #
39
- # *project_root* ::
37
+ # *default.project_root* ::
40
38
  # Sets the root directory where repositories have been
41
39
  # placed.
42
- # *git_path* ::
40
+ # *default.git_path* ::
43
41
  # Path to the git command line.
44
42
  #
45
43
  # [*treeish*]
46
44
  # Configuration for Treeish JSON API.
47
45
  #
48
- # *authenticate* ::
46
+ # *treeish.authenticate* ::
49
47
  # Sets if the tree view server requires authentication.
50
48
  #
51
49
  # [*http_backend*]
52
50
  # HTTP-Backend configuration.
53
51
  #
54
- # *authenticate* ::
52
+ # *http_backend.authenticate* ::
55
53
  # Sets if authentication is required.
56
54
  #
57
- # *get_any_file* ::
55
+ # *http_backend.get_any_file* ::
58
56
  # Like +http.getanyfile+.
59
57
  #
60
- # *upload_pack* ::
58
+ # *http_backend.upload_pack* ::
61
59
  # Like +http.uploadpack+.
62
60
  #
63
- # *receive_pack* ::
61
+ # *http_backend.receive_pack* ::
64
62
  # Like +http.receivepack+.
65
63
  module Lighttp
66
-
67
64
  class ProjectHandler #:nodoc:
68
-
69
65
  # Path to git comamnd
70
66
  attr_reader :path
71
67
 
@@ -73,14 +69,14 @@ module Git
73
69
 
74
70
  attr_reader :repository
75
71
 
76
- def initialize(project_root, path = "/usr/bin/git")
72
+ def initialize(project_root, path = '/usr/bin/git')
77
73
  @repository = nil
78
74
  @path = check_path(File.expand_path(path))
79
75
  @project_root = check_path(File.expand_path(project_root))
80
76
  end
81
77
 
82
78
  def path_to(*args)
83
- File.join(@repository || @project_root, *(args.compact.map(&:to_s)))
79
+ File.join(@repository || @project_root, *args.compact.map(&:to_s))
84
80
  end
85
81
 
86
82
  def repository=(name)
@@ -88,11 +84,11 @@ module Git
88
84
  end
89
85
 
90
86
  def cli(command, *args)
91
- %Q[#{@path} #{args.unshift(command.to_s.gsub("_","-")).compact.join(" ")}]
87
+ "#{@path} #{args.unshift(command.to_s.tr('_', '-')).compact.join(' ')}"
92
88
  end
93
89
 
94
90
  def run(command, *args)
95
- chdir{ %x[#{cli command, *args}] }
91
+ chdir { %x(#{cli command, *args}) }
96
92
  end
97
93
 
98
94
  def read_file(*file)
@@ -111,32 +107,42 @@ module Git
111
107
  path_to(:objects, :info, :packs)
112
108
  end
113
109
 
114
- def tree(ref = "HEAD", path = "")
110
+ def tree(ref = 'HEAD', path = '')
115
111
  list = run("ls-tree --abbrev=6 --full-tree --long #{ref}:#{path}")
116
112
  if list
117
113
  tree = []
118
- list.scan %r{^(\d{3})(\d)(\d)(\d) (\w.*?) (.{6})[ \t]{0,}(.*?)\t(.*?)\n}m do
114
+ pattern = /^
115
+ (?<ty>\d{3})
116
+ (?<pu>\d)
117
+ (?<pg>\d)
118
+ (?<po>\d)[ ]
119
+ (?<ot>\w.*?)[ ]
120
+ (?<oh>.{6})[ \t]{0,}
121
+ (?<sz>.*?)\t
122
+ (?<nm>.*?)\n
123
+ /mux
124
+ list.scan pattern do |ty, pu, pg, po, ot, oh, sz, nm|
119
125
  object = {
120
- :ftype => ftype[$1],
121
- :fperm => "#{fperm[$2.to_i]}#{fperm[$3.to_i]}#{fperm[$4.to_i]}",
122
- :otype => $5.to_sym,
123
- :ohash => $6,
124
- :fsize => fsize($7, 2),
125
- :fname => $8
126
+ ftype: ftype[ty],
127
+ fperm: "#{fperm[pu.to_i]}#{fperm[pg.to_i]}#{fperm[po.to_i]}",
128
+ otype: ot.to_sym,
129
+ ohash: oh,
130
+ fsize: fsize(sz, 2),
131
+ fname: nm
126
132
  }
127
133
  object[:objects] = nil if object[:otype] == :tree
128
134
  tree << object
129
135
  end
130
136
  tree
131
137
  else
132
- nil
138
+ false
133
139
  end
134
140
  end
135
141
 
136
142
  private
137
143
 
138
144
  def repository_path(name)
139
- bare = name =~ /\w\.git/ ? name : %W[#{name} .git]
145
+ bare = name =~ /\w\.git/ ? name : %W(#{name} .git)
140
146
  check_path(path_to(*bare))
141
147
  end
142
148
 
@@ -149,29 +155,30 @@ module Git
149
155
  end
150
156
 
151
157
  def ftype
152
- { "120" => "l", "100" => "-", "040" => "d" }
158
+ { '120' => 'l', '100' => '-', '040' => 'd' }
153
159
  end
154
160
 
155
161
  def fperm
156
- [ "---", "--x", "-w-", "-wx", "r--", "r-x", "rw-", "rwx" ]
162
+ ['---', '--x', '-w-', '-wx', 'r--', 'r-x', 'rw-', 'rwx']
157
163
  end
158
164
 
159
165
  def fsize(str, scale = 1)
160
- units = [ :b, :kb, :mb, :gb, :tb ]
166
+ units = [:b, :kb, :mb, :gb, :tb]
161
167
  value = str.to_f
162
168
  size = 0.0
163
169
  units.each_index do |i|
164
170
  size = value / 1024**i
165
- return [format("%.#{scale}f", size).to_f, units[i].to_s.upcase] if size <= 10
171
+ return [
172
+ format("%.#{scale}f", size).to_f,
173
+ units[i].to_s.upcase
174
+ ] if size <= 10
166
175
  end
167
176
  end
168
-
169
177
  end
170
178
 
171
179
  class Htpasswd #:nodoc:
172
-
173
180
  def initialize(file)
174
- require "webrick/httpauth/htpasswd"
181
+ require 'webrick/httpauth/htpasswd'
175
182
  @handler = WEBrick::HTTPAuth::Htpasswd.new(file)
176
183
  yield self if block_given?
177
184
  end
@@ -179,14 +186,14 @@ module Git
179
186
  def find(username) #:yield: password, salt
180
187
  password = @handler.get_passwd(nil, username, false)
181
188
  if block_given?
182
- yield password ? [password, password[0,2]] : [nil, nil]
189
+ yield password ? [password, password[0, 2]] : [nil, nil]
183
190
  else
184
191
  password
185
192
  end
186
193
  end
187
194
 
188
195
  def authenticated?(username, password)
189
- self.find username do |crypted, salt|
196
+ find username do |crypted, salt|
190
197
  crypted && salt && crypted == password.crypt(salt)
191
198
  end
192
199
  end
@@ -215,14 +222,13 @@ module Git
215
222
  private
216
223
 
217
224
  def users
218
- @handler.each{|username, password| username }
225
+ @handler.each { |username, _password| username }
219
226
  end
220
227
  end
221
228
 
222
229
  class Htgroup #:nodoc:
223
-
224
230
  def initialize(file)
225
- require "webrick/httpauth/htgroup"
231
+ require 'webrick/httpauth/htgroup'
226
232
  WEBrick::HTTPAuth::Htgroup.class_eval do
227
233
  attr_reader :group
228
234
  end
@@ -235,15 +241,13 @@ module Git
235
241
  end
236
242
 
237
243
  def groups(username)
238
- @handler.group.select do |group, members|
244
+ @handler.group.select do |_group, members|
239
245
  members.include? username
240
246
  end.keys
241
247
  end
242
-
243
248
  end
244
249
 
245
250
  module GitHelpers #:nodoc:
246
-
247
251
  def git
248
252
  @git ||= ProjectHandler.new(settings.project_root, settings.git_path)
249
253
  end
@@ -254,15 +258,13 @@ module Git
254
258
  end
255
259
 
256
260
  def content_type_for_git(name, *suffixes)
257
- content_type("application/x-git-#{name}-#{suffixes.compact.join("-")}")
261
+ content_type("application/x-git-#{name}-#{suffixes.compact.join('-')}")
258
262
  end
259
-
260
263
  end
261
264
 
262
265
  module AuthenticationHelpers #:nodoc:
263
-
264
266
  def htpasswd
265
- @htpasswd ||= Htpasswd.new(git.path_to("htpasswd"))
267
+ @htpasswd ||= Htpasswd.new(git.path_to('htpasswd'))
266
268
  end
267
269
 
268
270
  def authentication
@@ -270,28 +272,28 @@ module Git
270
272
  end
271
273
 
272
274
  def authenticated?
273
- request.env["REMOTE_USER"] && request.env["git.lighttp.authenticated"]
275
+ request.env['REMOTE_USER'] && request.env['git.lighttp.authenticated']
274
276
  end
275
277
 
276
278
  def authenticate(username, password)
277
- checked = [ username, password ] == authentication.credentials
279
+ checked = [username, password] == authentication.credentials
278
280
  validated = authentication.provided? && authentication.basic?
279
281
  granted = htpasswd.authenticated? username, password
280
- if checked and validated and granted
281
- request.env["git.lighttp.authenticated"] = true
282
- request.env["REMOTE_USER"] = authentication.username
282
+ if checked && validated && granted
283
+ request.env['git.lighttp.authenticated'] = true
284
+ request.env['REMOTE_USER'] = authentication.username
283
285
  else
284
- nil
286
+ false
285
287
  end
286
288
  end
287
289
 
288
- def unauthorized!(realm = Git::Lighttp::info)
289
- headers "WWW-Authenticate" => %(Basic realm="#{realm}")
290
- throw :halt, [ 401, "Authorization Required" ]
290
+ def unauthorized!(realm = Git::Lighttp.info)
291
+ headers 'WWW-Authenticate' => %(Basic realm="#{realm}")
292
+ throw :halt, [401, 'Authorization Required']
291
293
  end
292
294
 
293
295
  def bad_request!
294
- throw :halt, [ 400, "Bad Request" ]
296
+ throw :halt, [400, 'Bad Request']
295
297
  end
296
298
 
297
299
  def authenticate!
@@ -299,7 +301,7 @@ module Git
299
301
  unauthorized! unless authentication.provided?
300
302
  bad_request! unless authentication.basic?
301
303
  unauthorized! unless authenticate(*authentication.credentials)
302
- request.env["REMOTE_USER"] = authentication.username
304
+ request.env['REMOTE_USER'] = authentication.username
303
305
  end
304
306
 
305
307
  def access_granted?(username, password)
@@ -309,31 +311,37 @@ module Git
309
311
  end # AuthenticationHelpers
310
312
 
311
313
  # Servers
312
- autoload :HttpBackend, "git/lighttp/http_backend"
313
- autoload :Treeish, "git/lighttp/treeish"
314
+ autoload :HttpBackend, 'git/lighttp/http_backend'
315
+ autoload :Treeish, 'git/lighttp/treeish'
314
316
 
315
317
  class << self
316
318
 
319
+ DEFAULT_CONFIG = {
320
+ default: {
321
+ project_root: '/home/git',
322
+ git_path: '/usr/bin/git'
323
+ },
324
+ treeish: {
325
+ authenticate: false
326
+ },
327
+ http_backend: {
328
+ authenticate: true,
329
+ get_any_file: true,
330
+ upload_pack: true,
331
+ receive_pack: false
332
+ }
333
+ }.freeze
334
+
317
335
  def config
318
- @config ||= {
319
- :default => {
320
- :project_root => "/home/git",
321
- :git_path => "/usr/bin/git"
322
- },
323
- :treeish => {
324
- :authenticate => false
325
- },
326
- :http_backend => {
327
- :authenticate => true,
328
- :get_any_file => true,
329
- :upload_pack => true,
330
- :receive_pack => false
331
- }
332
- }.to_struct
336
+ @config ||= DEFAULT_CONFIG.to_struct
337
+ end
338
+
339
+ def config_reset!
340
+ @config = DEFAULT_CONFIG.to_struct
333
341
  end
334
342
 
335
343
  # Configure Git::Lighttp modules using keys. See Config for options.
336
- def configure(&block)
344
+ def configure(*) # :yield: config
337
345
  yield config
338
346
  config
339
347
  end
@@ -345,21 +353,16 @@ module Git
345
353
  end
346
354
  end
347
355
  config
348
- rescue IndexError => error
349
- abort "configuration option not found"
356
+ rescue IndexError
357
+ abort 'configuration option not found'
350
358
  end
351
-
352
359
  end
353
360
 
354
361
  class Application < Sinatra::Base #:nodoc:
355
-
356
362
  set :project_root, lambda { Git::Lighttp.config.default.project_root }
357
363
  set :git_path, lambda { Git::Lighttp.config.default.git_path }
358
364
 
359
- mime_type :json, "application/json"
360
-
365
+ mime_type :json, 'application/json'
361
366
  end
362
-
363
367
  end
364
-
365
368
  end