From ada25f33e0f9f33725121764755d301fe517181f Mon Sep 17 00:00:00 2001 From: "Markus M. May" Date: Sat, 31 Dec 2016 14:06:29 +0100 Subject: [PATCH 1/3] Add config settings, add .gitignore --- .gitignore | 1 + app/models/repository/git_remote.rb | 11 +++++++- .../settings/_redmine_git_remote.html.erb | 16 ++++++++++++ config/settings.yml | 2 ++ init.rb | 8 +++++- .../repositories_helper_patch.rb | 25 ++++++++++++------- 6 files changed, 52 insertions(+), 11 deletions(-) create mode 100644 .gitignore create mode 100644 app/views/settings/_redmine_git_remote.html.erb create mode 100644 config/settings.yml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c05e777 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +repos diff --git a/app/models/repository/git_remote.rb b/app/models/repository/git_remote.rb index f5c0b2d..0fa5441 100644 --- a/app/models/repository/git_remote.rb +++ b/app/models/repository/git_remote.rb @@ -79,7 +79,16 @@ def initialize_clone p = parse(attributes["extra_info"]["extra_clone_url"]) self.identifier = p[:identifier] if identifier.empty? - self.url = PATH_PREFIX + p[:path] if url.empty? + + url_prefix = PATH_PREFIX + unless Setting.plugin_redmine_git_remote["git_local_path_default"].blank? + url_prefix = Setting.plugin_redmine_git_remote["git_local_path_default"] + if !url_prefix.end_with?("/") then + url_prefix = url_prefix + "/" + end + end + + self.url = url_prefix + p[:path] if url.empty? err = ensure_possibly_empty_clone_exists errors.add :extra_clone_url, err if err diff --git a/app/views/settings/_redmine_git_remote.html.erb b/app/views/settings/_redmine_git_remote.html.erb new file mode 100644 index 0000000..8ebc1c3 --- /dev/null +++ b/app/views/settings/_redmine_git_remote.html.erb @@ -0,0 +1,16 @@ +

+ + + Default Path, where repositories are created locally. +

+

+ + + Default Prefix of the Remote Repository. +

diff --git a/config/settings.yml b/config/settings.yml new file mode 100644 index 0000000..819d1af --- /dev/null +++ b/config/settings.yml @@ -0,0 +1,2 @@ +git_local_path: '' +git_remote_url_prefix: '' diff --git a/init.rb b/init.rb index badbe78..1dc3e18 100644 --- a/init.rb +++ b/init.rb @@ -8,5 +8,11 @@ author 'Alex Dergachev' url 'https://github.com/dergachev/redmine_git_remote' description 'Automatically clone and fetch remote git repositories' - version '0.0.1' + version '0.0.2' + + PLUGIN_ROOT = Pathname.new(__FILE__).join("..").realpath.to_s + options = YAML::load( File.open(File.join(PLUGIN_ROOT + '/config', 'settings.yml'))) + + settings :default => {'git_local_path_default' => options['git_local_path'], + 'git_remote_url_prefix_default' => options['git_remote_url_prefix']}, :partial => 'settings/redmine_git_remote' end diff --git a/lib/redmine_git_remote/repositories_helper_patch.rb b/lib/redmine_git_remote/repositories_helper_patch.rb index 508ac53..95b1f1c 100644 --- a/lib/redmine_git_remote/repositories_helper_patch.rb +++ b/lib/redmine_git_remote/repositories_helper_patch.rb @@ -6,15 +6,22 @@ def self.included(base) # :nodoc: module InstanceMethods def git_remote_field_tags(form, repository) - content_tag('p', form.text_field(:url, - :size => 60, :required => false, - :disabled => !repository.safe_attribute?('url'), - :label => l(:field_path_to_repository)) + - content_tag('em', l(:text_git_remote_path_note), :class => 'info') + - form.text_field(:extra_clone_url, :size => 60, :required => true, - :disabled => !repository.safe_attribute?('url')) + - content_tag('em', l(:text_git_remote_url_note), :class => 'info') - ) + local_path_tag = form.text_field(:url, + :size => 60, :required => false, + :disabled => !repository.safe_attribute?('url'), + :label => l(:field_path_to_repository)) + local_path_note = content_tag('em', l(:text_git_remote_path_note), :class => 'info') + + remote_url_prefix = Setting.plugin_redmine_git_remote["git_remote_url_prefix_default"].presence || '' + + remote_url_tag = form.text_field(:extra_clone_url, :size => 60, :required => true, + :value => remote_url_prefix, + :disabled => !repository.safe_attribute?('url')) + remote_url_note = content_tag('em', l(:text_git_remote_url_note), :class => 'info') + + git_remote_tag = content_tag('p', local_path_tag + local_path_note + remote_url_tag + remote_url_note) + + git_remote_tag end end end From f02352e0aaa807520026a0b9dee35dfa0f282076 Mon Sep 17 00:00:00 2001 From: "Markus M. May" Date: Sat, 31 Dec 2016 14:35:45 +0100 Subject: [PATCH 2/3] Add documentation for settings --- README.md | 14 +++++++++++++- doc/settings.jpg | Bin 0 -> 24857 bytes 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 doc/settings.jpg diff --git a/README.md b/README.md index 60f595e..7c49d82 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,17 @@ Some extra tips: * On Ubuntu, the `www-data` user's $HOME is `/var/www`, and by default it's owned by root. That means you might have to do this before installing Redmine: `sudo mkdir /var/www/.ssh; sudo chown www-data:www-data /var/www/.ssh` +## Configuration + +The plugin offers two configuration options: + +* Local Repository Path (git_local_path) - Path, where repositories are created on the local system. This defaults to `REDMINE_PLUGINS_PATH/redmine_git_remote/repos`. +* Remote Repository Url Prefix - Default Prefix of the Remote Repository. The Default Prefix for Remote Repositories, defaults to an empty value. If this value is set, this prefix is shown in the Clone URL field of a repository by default, but can be overwritten by the user (eg. https://github.com/). + +![](doc/settings.jpg) + +The above configuration can be found at `Administration -> Plugins -> Redmine Git Remote -> Config`. Furthermore for initial values, the file `redmine_git_remote/conf/settings.yml` can be used. + ## Usage This plugin defines a new repository type, GitRemote, which allows you to associate @@ -57,7 +68,7 @@ On submitting the repository creation form, the identifier and `url` For example, if you enter `https://github.com/dergachev/vagrant-vbox-snapshot` as the Clone URL, it will prefill the Identifier and filesystem path fields as follows: * Identifier: `vagrant-vbox-snapshot` -* Path: `REDMINE_PLUGINS_PATH/redmine_git_remote/repos/github.com/dergachev/vagrant-vbox-snapshot` +* Path: `REDMINE_PLUGINS_PATH/redmine_git_remote/repos/github.com/dergachev/vagrant-vbox-snapshot` (Note: The Path can be configured using the above mentioned method, but can also be entered for each repository.) Once the remote URL is validated, the plugin creates an [empty clone](http://stackoverflow.com/questions/895819/whats-the-most-straightforward-way-to-clone-an-empty-bare-git-repository) at the specified path. @@ -83,6 +94,7 @@ cd /home/redmine/redmine && ./script/rails runner "Repository.fetch_changesets" Notes: * Tested on Redmine 2.6 and ruby 2.1 +* Tested on Redmine 3.3.1 * Currently alpha state, use at your own risk. Given possible security risks of shelling out, we recommend using this plugin only if all RedMine project admins are trusted users. * This plugin doesn't clean-up (delete) cloned repos from the file system when the record diff --git a/doc/settings.jpg b/doc/settings.jpg new file mode 100644 index 0000000000000000000000000000000000000000..892353f4f189f5735116f188c3615baea6917dcc GIT binary patch literal 24857 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 Date: Sat, 31 Dec 2016 14:36:17 +0100 Subject: [PATCH 3/3] Minor adoptions and code cleanup --- app/views/settings/_redmine_git_remote.html.erb | 12 ++++++------ init.rb | 3 ++- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/app/views/settings/_redmine_git_remote.html.erb b/app/views/settings/_redmine_git_remote.html.erb index 8ebc1c3..c1416a0 100644 --- a/app/views/settings/_redmine_git_remote.html.erb +++ b/app/views/settings/_redmine_git_remote.html.erb @@ -1,16 +1,16 @@

- - Local Repository Path + - Default Path, where repositories are created locally. + Path, where repositories are created locally.

- - Remote Repository Url Prefix + + name="settings[git_remote_url_prefix_default]"> Default Prefix of the Remote Repository.

diff --git a/init.rb b/init.rb index 1dc3e18..c67a91c 100644 --- a/init.rb +++ b/init.rb @@ -14,5 +14,6 @@ options = YAML::load( File.open(File.join(PLUGIN_ROOT + '/config', 'settings.yml'))) settings :default => {'git_local_path_default' => options['git_local_path'], - 'git_remote_url_prefix_default' => options['git_remote_url_prefix']}, :partial => 'settings/redmine_git_remote' + 'git_remote_url_prefix_default' => options['git_remote_url_prefix']}, + :partial => 'settings/redmine_git_remote' end