Elimina defintivamente plugin Redmine Git Server
This commit is contained in:
parent
7f92b9aa9e
commit
0f87f1397f
32 changed files with 0 additions and 498 deletions
|
@ -1,21 +0,0 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2016 Jean-Baptiste Barth
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
|
@ -1 +0,0 @@
|
|||
gem 'deface', '1.5.3'
|
|
@ -1,36 +0,0 @@
|
|||
Redmine base_deface plugin
|
||||
======================
|
||||
|
||||
Integrate with the deface gem to manage view modifications in plugins
|
||||
|
||||
Installation
|
||||
------------
|
||||
|
||||
This plugin is compatible with Redmine 2.1.0+.
|
||||
|
||||
Please apply general instructions for plugins [here](http://www.redmine.org/wiki/redmine/Plugins).
|
||||
|
||||
First download the source or clone the plugin and put it in the "plugins/" directory of your redmine instance. Note that this is crucial that the directory is named redmine_base_deface !
|
||||
|
||||
Then execute from redmine root directory:
|
||||
|
||||
$ bundle install
|
||||
$ rake redmine:plugins
|
||||
|
||||
And finally restart your Redmine instance.
|
||||
|
||||
|
||||
Contributing
|
||||
------------
|
||||
|
||||
1. Fork it
|
||||
2. Create your feature branch (`git checkout -b my-new-feature`)
|
||||
3. Commit your changes (`git commit -am 'Add some feature'`)
|
||||
4. Push to the branch (`git push origin my-new-feature`)
|
||||
5. Create new Pull Request
|
||||
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
This project is released under the MIT license, see LICENSE file.
|
|
@ -1 +0,0 @@
|
|||
This directory is only here to ensure the plugin works through unit tests. It is automatically added to Rails.application.paths["app/overrides"]
|
|
@ -1,20 +0,0 @@
|
|||
Redmine::Plugin.register :redmine_base_deface do
|
||||
name 'Redmine Base Deface plugin'
|
||||
author 'Jean-Baptiste BARTH'
|
||||
description 'This is a plugin for Redmine'
|
||||
version '1.5.3'
|
||||
url 'https://github.com/jbbarth/redmine_base_deface'
|
||||
author_url 'jeanbaptiste.barth@gmail.com'
|
||||
#doesn't work since redmine evaluates dependencies as it loads, and loads in lexical order
|
||||
#TODO: see if it works in Redmine 2.6.x or 3.x when they're released
|
||||
# requires_redmine_plugin :redmine_base_rspec, :version_or_higher => '0.0.3' if Rails.env.test?
|
||||
end
|
||||
|
||||
# Little hack for deface in redmine:
|
||||
# - redmine plugins are not railties nor engines, so deface overrides are not detected automatically
|
||||
# - deface doesn't support direct loading anymore ; it unloads everything at boot so that reload in dev works
|
||||
# - hack consists in adding "app/overrides" path of all plugins in Redmine's main #paths
|
||||
Rails.application.paths["app/overrides"] ||= []
|
||||
Dir.glob("#{Rails.root}/plugins/*/app/overrides").each do |dir|
|
||||
Rails.application.paths["app/overrides"] << dir unless Rails.application.paths["app/overrides"].include?(dir)
|
||||
end
|
|
@ -1,10 +0,0 @@
|
|||
require "spec_helper"
|
||||
|
||||
describe "DefacePaths" do
|
||||
it "should app overrides paths" do
|
||||
overrides_paths = Rails.application.paths["app/overrides"]
|
||||
this_plugin_paths = Rails.root.join("plugins/redmine_base_deface/app/overrides")
|
||||
assert overrides_paths.include?(this_plugin_paths.to_s),
|
||||
"The init.rb of this very plugin should add every plugins' app/overrides to rails paths for app/overrides"
|
||||
end
|
||||
end
|
|
@ -1 +0,0 @@
|
|||
gem 'grack', '0.1.1'
|
|
@ -1,21 +0,0 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2020 Romain Lalaut
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
|
@ -1,52 +0,0 @@
|
|||
Redmine plugin - Git Server
|
||||
============
|
||||
|
||||
This Redmine plugin lets your users pull and push to/from your git repositories hosted on Redmine with HTTP - without any complex setup.
|
||||
|
||||
Under the hood, it relies on [Grack](https://github.com/grackorg/grack), a Ruby/Rack Git Smart HTTP Server Handler.
|
||||
|
||||
|
||||
Screenshot
|
||||
------------
|
||||
|
||||

|
||||
|
||||
|
||||
Installation
|
||||
------------
|
||||
|
||||
This plugin is tested with Redmine 4.1+ (but it could be compatible with other versions).
|
||||
|
||||
Please apply general instructions for plugins [here](http://www.redmine.org/wiki/redmine/Plugins).
|
||||
|
||||
Note that this plugin depends on this other plugin:
|
||||
* **redmine_base_deface** [here](https://github.com/jbbarth/redmine_base_deface)
|
||||
|
||||
First download the source or clone the plugin and put it in the "plugins/" directory of your redmine instance. Note that this is crucial that the directory is named 'redmine_git_server'!
|
||||
|
||||
Then execute:
|
||||
|
||||
$ bundle install
|
||||
$ rake redmine:plugins
|
||||
|
||||
And finally restart your Redmine instance.
|
||||
|
||||
|
||||
Permissions
|
||||
-----------
|
||||
|
||||
* *Git Server > Enable git server* : allows a user to enable/disable the project module "Git Server"
|
||||
* *(Redmine built-in) Repository > View changesets* : allows a user to fetch changesets (pull) from a repository
|
||||
* *(Redmine built-in) Repository > Commit access* : allows a user to push to a repository
|
||||
|
||||
|
||||
Alternatives
|
||||
------------
|
||||
|
||||
* [redmine_git_hosting](http://redmine-git-hosting.io/) - based on Gitolite, this plugin offer a **lot** more features but it is also more complex to setup.
|
||||
|
||||
|
||||
Knowns issues
|
||||
-------------
|
||||
|
||||
Puma 3.7 which is currently bundled with Redmine has an issue with chunked uploads. You can upgrade to Puma 4.3 or configure git locally to avoid chunked uploads (eg. `git config --global http.postBuffer 524288000`)
|
|
@ -1,50 +0,0 @@
|
|||
class GitServerController < ApplicationController
|
||||
|
||||
skip_before_action :verify_authenticity_token
|
||||
skip_before_action :check_if_login_required
|
||||
|
||||
before_action do
|
||||
begin
|
||||
authenticate_or_request_with_http_basic do |username, password|
|
||||
@user = User.try_to_login(username, password, false)
|
||||
if @user.nil? or @user.new_record? or !@user.active?
|
||||
logger.info "(Git Server) Authentication failed from #{request.remote_ip} at #{Time.now.utc}"
|
||||
false
|
||||
else
|
||||
logger.info "(Git Server) Successful authentication for '#{@user.login}' from #{request.remote_ip} at #{Time.now.utc}"
|
||||
true
|
||||
end
|
||||
end
|
||||
next false unless @user
|
||||
project = Project.find(params[:id])
|
||||
unless project.module_enabled?("git_server")
|
||||
logger.warn "(Git Server) project '#{project.identifier}' doesn't have the git_server module enabled"
|
||||
render_404
|
||||
next false
|
||||
end
|
||||
repository = project.repositories.find_by_identifier_param(params[:repository_id])
|
||||
unless repository
|
||||
render_404
|
||||
next false
|
||||
end
|
||||
@grack_app = RedmineGitServer::GrackApp.new \
|
||||
request: request,
|
||||
repository_path: repository.url,
|
||||
allow_push: @user.allowed_to?(:commit_access, project),
|
||||
allow_pull: @user.allowed_to?(:view_changesets, project)
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
render_404
|
||||
end
|
||||
end
|
||||
|
||||
Grack::App::ROUTES.collect{|o| o[2] }.uniq.each do |action|
|
||||
define_method action do
|
||||
path = request.params["path"]
|
||||
params = action == :info_refs ? [] : [path]
|
||||
rack_response = @grack_app.send(action, *params)
|
||||
self.response = ActionDispatch::Response.new(*rack_response)
|
||||
response.sending!
|
||||
end
|
||||
end
|
||||
|
||||
end
|
|
@ -1,5 +0,0 @@
|
|||
Deface::Override.new virtual_path: 'repositories/show',
|
||||
name: 'insert_clone_button',
|
||||
insert_bottom: 'div.contextual',
|
||||
partial: 'repositories/clone_button'
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
<% user = User.current %>
|
||||
<% write_access = user.allowed_to?(:commit_access, @project) %>
|
||||
<% read_access = user.allowed_to?(:view_changesets, @project) %>
|
||||
<% if @project.module_enabled?("git_server") and read_access %>
|
||||
|
|
||||
<%= content_tag :div, class: 'drdn clone-wrapper' do %>
|
||||
<%= button_tag l(:clone), type: 'button', class: 'drdn-trigger clone-button' %>
|
||||
<%= content_tag :div, class: 'drdn-content clone-dropdown' do %>
|
||||
<% protocol = Setting['protocol'] %>
|
||||
<h4><%= l(:clone_with_protocol, protocol: protocol.upcase) %></h4>
|
||||
<%= render 'clone_form' %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% end %>
|
|
@ -1,28 +0,0 @@
|
|||
<% user = User.current %>
|
||||
<% write_access = user.allowed_to?(:commit_access, @project) %>
|
||||
<% read_access = user.allowed_to?(:view_changesets, @project) %>
|
||||
<%= content_tag :div, class: 'clone-form' do %>
|
||||
<% protocol = Setting['protocol'] %>
|
||||
<p>
|
||||
<%= l(:use_git_with_this_web_url) %>
|
||||
<% if write_access %>
|
||||
<%= l(:git_read_write_access) %>
|
||||
<% else %>
|
||||
<%= l(:git_read_only_access) %>
|
||||
<% end %>
|
||||
</p>
|
||||
<%= content_tag :code, class: 'clone-input-group' do %>
|
||||
<% url = url_for(
|
||||
controller: 'repositories',
|
||||
action: 'show',
|
||||
id: @project.identifier,
|
||||
repository_id: @repository.identifier,
|
||||
user: User.current.login,
|
||||
password: '',
|
||||
only_path: false,
|
||||
protocol: protocol).sub(':@', '@') %>
|
||||
<%= text_field_tag 'url', url, readonly: true %>
|
||||
<%= button_tag image_tag('../plugin_assets/redmine_git_server/images/copy-to-clipboard.png') %>
|
||||
<% end %>
|
||||
<div class="flash notice"><%= l(:url_copied) %></div>
|
||||
<% end %>
|
|
@ -1,10 +0,0 @@
|
|||
<% user = User.current %>
|
||||
<% write_access = user.allowed_to?(:commit_access, @project) %>
|
||||
<% read_access = user.allowed_to?(:view_changesets, @project) %>
|
||||
<div class="flash warning">
|
||||
<%= l(:empty_repository) %>
|
||||
</div>
|
||||
|
||||
<div class="empty-clone-form">
|
||||
<%= render 'clone_form' %>
|
||||
</div>
|
Binary file not shown.
Before Width: | Height: | Size: 543 B |
Binary file not shown.
Before Width: | Height: | Size: 21 KiB |
|
@ -1,15 +0,0 @@
|
|||
$(() => {
|
||||
$('body.controller-repositories.action-show code.clone-input-group input').click(function() {
|
||||
$(this).select()
|
||||
})
|
||||
$('body.controller-repositories.action-show code.clone-input-group button').click(function() {
|
||||
const $this = $(this)
|
||||
$this.siblings('input').click()
|
||||
document.execCommand("copy")
|
||||
const $flash = $this.parent().siblings('.flash.notice')
|
||||
$flash.show()
|
||||
setTimeout(function() {
|
||||
$flash.hide("fast")
|
||||
}, 1000)
|
||||
})
|
||||
})
|
|
@ -1,47 +0,0 @@
|
|||
.clone-wrapper {
|
||||
display: inline-block;
|
||||
margin-left: O!important;
|
||||
}
|
||||
.clone-button {
|
||||
background-color: #fff;
|
||||
background-image: url(../../../images/arrow_down.png);
|
||||
background-repeat: no-repeat;
|
||||
background-position: calc(100% - 7px) 50%;
|
||||
padding-right: 20px;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
.clone-dropdown {
|
||||
top: 28px!important;
|
||||
padding: 1em;
|
||||
width: 350px;
|
||||
}
|
||||
.clone-input-group {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
}
|
||||
.clone-input-group > * {
|
||||
height: 26px!important;
|
||||
}
|
||||
.clone-input-group input {
|
||||
flex: 1;
|
||||
font-size: 1.2em;
|
||||
font-family: inherit;
|
||||
}
|
||||
.clone-input-group button {
|
||||
flex: none;
|
||||
margin-left: 0.5em;
|
||||
}
|
||||
.clone-input-group button img {
|
||||
vertical-align: middle;
|
||||
}
|
||||
.clone-form .flash.notice {
|
||||
display: none;
|
||||
position: absolute;
|
||||
padding-right: 1em;
|
||||
right: .5em;
|
||||
margin-top: 1.5em;
|
||||
}
|
||||
.empty-clone-form {
|
||||
max-width: 600px;
|
||||
position: relative;
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
en:
|
||||
project_module_git_server: Git Server
|
||||
clone: Clone
|
||||
clone_with_protocol: Clone with %{protocol}
|
||||
use_git_with_this_web_url: Use Git with this web URL.
|
||||
url_copied: URL copied to the clipboard
|
||||
git_read_write_access: Read/write access.
|
||||
git_read_only_access: Read only access.
|
||||
empty_repository: This repository is empty.
|
|
@ -1,9 +0,0 @@
|
|||
es:
|
||||
project_module_git_server: Git Server
|
||||
clone: Clonar
|
||||
clone_with_protocol: Clonar usando %{protocol}
|
||||
use_git_with_this_web_url: Usar Git con esta URL.
|
||||
url_copied: URL copiada al portapapeles
|
||||
git_read_write_access: Acceso de lectura/escritura.
|
||||
git_read_only_access: Acceso de sólo lectura.
|
||||
empty_repository: Este repositorio está vacío.
|
|
@ -1,10 +0,0 @@
|
|||
fr:
|
||||
project_module_git_server: Serveur Git
|
||||
clone: Cloner
|
||||
clone_with_protocol: Cloner via %{protocol}
|
||||
use_git_with_this_web_url: Utilisez Git avec cette URL.
|
||||
url_copied: URL copiée dans le presse-papiers
|
||||
git_read_write_access: Accès en lecture/écriture.
|
||||
git_read_only_access: Accès en lecture seule.
|
||||
empty_repository: Ce dépôt est vide.
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
|
||||
Grack::App::ROUTES.each do |grack_route|
|
||||
regex = grack_route[0]
|
||||
method = grack_route[1].downcase.to_sym
|
||||
action = grack_route[2]
|
||||
match 'projects/:id/repository/:repository_id/*path',
|
||||
controller: 'git_server',
|
||||
action: action,
|
||||
via: method,
|
||||
format: false,
|
||||
constraints: -> (request) {
|
||||
regex.match(request.path)
|
||||
}
|
||||
end
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
Redmine::Plugin.register :redmine_git_server do
|
||||
name 'Redmine Git Server plugin'
|
||||
author 'Romain Lalaut'
|
||||
description 'This is a plugin for Redmine allowing to serve the git repositories through the http connection'
|
||||
url 'https://github.com/voondo/redmine_git_server'
|
||||
version '0.4'
|
||||
author_url 'https://github.com/voondo'
|
||||
project_module :git_server do
|
||||
permission :enable_git_server, {}
|
||||
end
|
||||
end
|
||||
|
||||
require_dependency 'redmine_git_server/hooks'
|
||||
|
||||
app = Rails.application
|
||||
app.config.to_prepare do
|
||||
plugin = Redmine::Plugin.find(:redmine_git_server)
|
||||
plugin.requires_redmine_plugin :redmine_base_rspec, :version_or_higher => '0.0.4' if Rails.env.test?
|
||||
plugin.requires_redmine_plugin :redmine_base_deface, :version_or_higher => '0.0.1'
|
||||
require_dependency 'redmine_git_server/patches/repositories_controller_patch'
|
||||
end
|
|
@ -1,15 +0,0 @@
|
|||
module RedmineGitServer
|
||||
class GrackApp < Grack::App
|
||||
|
||||
def initialize opts
|
||||
@request = opts.fetch(:request, nil)
|
||||
@env = @request.env
|
||||
@git = RedmineGitServer::GrackGitAdapter.new Redmine::Scm::Adapters::GitAdapter::GIT_BIN
|
||||
@git.repository_path = opts.fetch(:repository_path, nil)
|
||||
@allow_push = opts.fetch(:allow_push, nil)
|
||||
@allow_pull = opts.fetch(:allow_pull, nil)
|
||||
@request_verb = @request.method
|
||||
end
|
||||
|
||||
end
|
||||
end
|
|
@ -1,26 +0,0 @@
|
|||
|
||||
module RedmineGitServer
|
||||
class GrackGitAdapter < Grack::GitAdapter
|
||||
|
||||
def command(cmd, args, io_in, io_out, dir = nil)
|
||||
cmd = [git_path, cmd] + args
|
||||
opts = {:err => :close}
|
||||
opts[:chdir] = dir unless dir.nil?
|
||||
cmd << opts
|
||||
IO.popen(cmd, 'r+b') do |pipe|
|
||||
while !io_in.nil? and !io_in.closed? and !io_in.eof? do
|
||||
chunk = io_in.read(READ_SIZE)
|
||||
pipe.write(chunk)
|
||||
end
|
||||
pipe.close_write
|
||||
while !pipe.eof? do
|
||||
chunk = pipe.read(READ_SIZE)
|
||||
unless io_out.nil?
|
||||
io_out.write(chunk)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
|
@ -1,11 +0,0 @@
|
|||
module RedmineGitServer
|
||||
class Hooks < Redmine::Hook::ViewListener
|
||||
|
||||
# Add our css/js on each page
|
||||
def view_layouts_base_html_head(context)
|
||||
tags = stylesheet_link_tag('git_server.css', plugin: 'redmine_git_server')
|
||||
tags += javascript_include_tag('git_server.js', plugin: 'redmine_git_server')
|
||||
end
|
||||
|
||||
end
|
||||
end
|
|
@ -1,12 +0,0 @@
|
|||
require_dependency 'repositories_controller'
|
||||
|
||||
module RepositoriesControllerWithGitServerSupport
|
||||
|
||||
def show_error_not_found
|
||||
return super if params[:action] != 'show'
|
||||
render action: 'empty'
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
RepositoriesController.send(:prepend, RepositoriesControllerWithGitServerSupport)
|
|
@ -1,16 +0,0 @@
|
|||
require "spec_helper"
|
||||
|
||||
describe GitServerController, :type => :controller do
|
||||
|
||||
fixtures :roles, :users
|
||||
|
||||
before do
|
||||
@request.session[:user_id] = 1 # Admin
|
||||
User.current = User.find(1)
|
||||
Setting.default_language = 'en'
|
||||
end
|
||||
|
||||
it "should be tested (FIXME)" do
|
||||
end
|
||||
|
||||
end
|
|
@ -1,8 +0,0 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe GitServerHelper, type: :helper do
|
||||
|
||||
it "should be tested (FIXME)" do
|
||||
end
|
||||
|
||||
end
|
|
@ -1,4 +0,0 @@
|
|||
# for travis debugging
|
||||
# config.logger = Logger.new(STDOUT)
|
||||
# config.logger.level = Logger::INFO
|
||||
# config.log_level = :info
|
|
@ -1,6 +0,0 @@
|
|||
test:
|
||||
adapter: postgresql
|
||||
encoding: unicode
|
||||
pool: 5
|
||||
database: travis_ci_test
|
||||
user: postgres
|
|
@ -1305,10 +1305,6 @@ input[type="submit"].small {
|
|||
font-size: 12px;
|
||||
}
|
||||
|
||||
div.clone-wrapper .clone-button {
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
19. GANTT CHART */
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue