Giter Site home page Giter Site logo

redmine-git-hosting / redmine_git_hosting Goto Github PK

View Code? Open in Web Editor NEW
272.0 272.0 117.0 8 MB

A Redmine plugin which makes configuring your own Git hosting easy ;)

Home Page: http://redmine-git-hosting.io

License: MIT License

Ruby 66.67% JavaScript 1.29% CSS 1.19% Python 20.90% Shell 0.73% Slim 9.22%

redmine_git_hosting's People

Contributors

akasch avatar alexandermeindl avatar allen57 avatar baby-gnu avatar bearded avatar bellatriks avatar claudiameindl avatar dgeo avatar dosyfier avatar edmcdonagh avatar guenbakku avatar korin avatar ladynamedlaura avatar mathprod avatar mnencia avatar n-rodriguez avatar nicesw123 avatar nioshd avatar phiber2000 avatar picman avatar powerkiki avatar prahal avatar rogerpueyo avatar sboisson avatar soeren-helbig avatar stanclai avatar strnadj avatar tatikoma avatar wilsoc5 avatar wvolz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

redmine_git_hosting's Issues

selinux rake task

The rake task for selinux configuration by default points to

{Rails.root}/vendor/plugins/redmine_git_hosting/selinux/

Where as rails 3 wants it at #{Rails.root}/plugins/redmine_git_hosting/selinux/

This causes the rake task to fail when it can't find the .pp file.

I created a temporary symbolic link in vendors/plugins to point to plugins, then ran the rake task, and then removed the symlink and everything worked.

Configure Not Work

When I click in "configure" (http://localhost:8000/settings/plugin/redmine_git_hosting) the Redmine give this message:

"Internal error

An error occurred on the page you were trying to access.
If you continue to experience problems please contact your Redmine administrator for assistance.

If you are the Redmine administrator, check your log files for details about the error.

Back"

And the LOG shows:

ActionView::Template::Error (Permission denied -
/root/tmp/redmine_git_hosting/git/redmine_git_hosting_lock):

one access control problem of gitolite_plugin

I find gitolite support access control that someone only can read and write branchs but not master.
But I could not find how to configure it by gitolite_plugin
is there someplace that i ignored in gitolite_plugin for this problem?

The last (Git) repository will not be deleted

When deleting the last git repository from redmine/chiliproject, the gitolite managed repository will not be deleted (moved to recycle_bin).

The bug is actually caused by an early exit in the update_repositories method in lib/libs/git_hosting.rb. In case, no git repositories remain in redmine/chiliproject, the method will return (return if git_projects.empty?; line 805 in current master branch) before performing the actual cleanup of orphaned repositories.

The method should proceed in any case, or at least if the action is delete (in that case, the subject project will not be contained in the projects/git_projects lists, as it is deleted already).

Linking plugin_assets

Hi,

just found some routing errors in my logs from redmine 2.3. Figured out it expects the js, css, etc. in the REDMINE_ROOT/public/plugin_assets/redmine_git_hosting/... instead of REDMINE_ROOT[/vendor]/plugins/redmine_git_hosting/assets/...

A short cd REDMINE_ROOT/public && mkdir plugin_assets && ln -s plugin_assets/redmine_git_hosting plugins/redmine_git_hosting/assets already does the trick.

Maybe you can include this?

Cheers

Modifying gitolite usernames to not be redmine_username_int_int

My setup is:

  • Nginx (for git only + proxy to redmine's webserver)
  • Puma webserver for Redmine

This plugin has been installed and configured. Repo's are being generated properly and I'm very close to getting this to work as it should.

The webserver authentication (trough pam => LDAP) works and the username is properly forwarded to gitolite. However, because the permissions in the gitolite configuration are "redmine_username_integer_integer" and not "username" the user does not have permission to do anything with it. I manually updated the gitolite.conf-compiled.pm file and the access list when requesting it via the browser shows all repo's.

Why is it using this format and can it be changed somehow? I don't see why stuff needs explicit redmine_.... tagged to it.

Unable to detect Version Number on Gentoo

Because gitolite prints "hello gitolite_admin_id_rsa, this is gitolite gitolite-2.3.1 running on git 1.8.1.5" on my system the plugin was unable to detect the version number
(lib/libs/git_hosting.rb LINE 239: if line =~ /gitolite v?2./)
I changed that line to
if line =~ /gitolite[ -]v?2./
Now the plugin works properly.

Make keys usable outside of Redmine

I have been using the version of this plugin that John Kubitron had worked on and it had the ability to configure the format of the key identifier used for users. This allowed the use case scenario of having Redmine manage repositories linked to projects, but also providing the key management for gitolite for repositories not managed by Redmine.

Looking over this plugin, it seems like the key files have a rather non user-friendly format and it keeps changing. This would seem to make it impossible to use these keys elsewhere in gitolite. Is there any way this can be changed so the keyfiles/identifiers can be reused elsewhere in gitolite? I don't see it as an option to require the use of 2 ssh keys for each user, 1 for redmine hosted repos and 1 for gitolite hosted repos outside of redmine.

Thanks!

--Robert

Git by HTTPS not working

Hi,

I'm just install and configure your plugin on my redmine installation.
Its's working as fine by SSH, but I could not access GIT by http or https and receive this error from tortoisegit.

git did not exit cleanly (exit code 128)

No error in production.log
Thanks for help
Yannick

Installation fails on *BSD

Installation fails on any BSD because apparently the redmine_git_hosting:install_scripts task will use SELinux no matter what (contrary to the readme).

[Generating and installing redmine_git_hosting shell scripts:
find: -regextype: unknown option
rake aborted!
Error: ROOT_PATTERN does not match any directories!
/home/redmine/plugins/redmine_git_hosting/lib/tasks/selinux.rake:325:in `redmine_roots'
/home/redmine/plugins/redmine_git_hosting/lib/tasks/selinux.rake:114:in `block (3 levels) in <top (required)>'
/home/redmine/plugins/redmine_git_hosting/lib/tasks/selinux.rake:134:in `block (3 levels) in <top (required)>'
/home/redmine/plugins/redmine_git_hosting/lib/tasks/redmine_git_hosting.rake:100:in `block (2 levels) in <top (required)>'
Tasks: TOP => selinux:redmine_git_hosting:across_roots(See full trace by running task with --trace)

In this case, the rake task fails because of a non-standard find option, but even if I were to bypass this issue, I suspect many more would pop up simply because my NetBSD server is...well...BSD.

Is there a reason that SELinux is absolutely required for installation?

tab "keys" on user-edit screen is missing after upgrade

I've "almost" successfully finished Redmine upgrade, from v.1.4.x + ruby 1.8.7 to v.2.3.0 + ruby 1.9.3. redmine_git_hosting plugin is upgraded from old version (v0.5.1x from kubitron) to newer one (v0.6.1).
Almost everything is functioning OK, except tab "keys" on user-edit screen which allow administrator to examine and edit users keys, which is missing.

Logging redmine_git_hosting

Hi,

I have a file called production.log which was assigned by Redmine and so far I'm able to see what happens around the plugin. I can see some elements and the plugin is running fine.

Nevertheless, I have no chance to see if a user adds public key what this lands. I can't see where or if it copied. Is there a way to see this?

I don't any entries in authorized_keys and the uploaded keys aren't recognized. I would like to track that error and fix, but I don't know how. Could someone help me here?

Thanks in advance

Configuration issue

HI,

I'm new with redmine and redmine_git_hosting.
I'm following different post to install all components but I do an error when I set the .ssh path for the plugin. After correcting in the configuration page, I always see this error at the bottom and repo was not created ;

Could not create directory '/var/www/clients/client1/web6/.ssh'.
Failed to add the host to the list of known hosts (/var/www/clients/client1/web6/.ssh/known_hosts).
Permission denied (publickey,password).

the correct path is '/var/www/clients/client1/web6/web/.ssh'

How can I fix this ?
Thanks for help,
Yannick

Settings not being respected

I am running redmine 1.3.2.stable with the latest git master of gitolite and redmine_git_hosting.

The install went almost without problems (missing dependencies were not reported, but I figured them out and installed them, plus some problems with missing dirs in /tmp and wrong permissions, which I believe I also fixed).

In the config page in the redmine backend (Administration => Plugins => Configure), I set the gitolite user to "gitolite" and the server to my domain name, followed by the port information (domain.com:portnumber). But if I try to create a new repository, it fails (giving some HTML / JS / Whatever output (Element.update("tab-content-repository", [...], tell me if you need more). When I check the redmine log, I see:

[GitHosting] Got projects, move on!
[GitHosting] Cloning gitolite-admin repository to /tmp/redmine_git_hosting/gitolite/gitolite-admin
***> [GitHosting] Command failed (return 128): env GIT_SSH=/usr/share/redmine/vendor/plugins/redmine_git_hosting/bin/gitolite_admin_ssh git clone ssh://gitolite@localhost/gitolite-admin.git /tmp/redmine_git_hosting/gitolite/gitolite-admin
***>   Cloning into '/tmp/redmine_git_hosting/gitolite/gitolite-admin'...
***>   ssh: connect to host localhost port 22: Connection refused
***>   fatal: The remote end hung up unexpectedly
[GitHosting] Attempting to restore repository access key:
[GitHosting] Cloning administrative repo directly as gitolite in /tmp/fixrepo/gitolite/gitolite-admin
[GitHosting] Establishing 'id_gitolite.pub' as the redmine_git_hosting administrative key
[GitHosting] Additional administrative key(s): 'User.pub'
[GitHosting] Pushing fixes using gl-admin-push
***> [GitHosting] Command failed (return 127): /usr/share/redmine/vendor/plugins/redmine_git_hosting/bin/run_as_git_user "cd /tmp/fixrepo/gitolite/gitolite-admin; gl-admin-push -f"
***>   -bash: gl-admin-push: command not found
***> [GitHosting] gl-admin-push failed (pre 2.0.3 gitolite?). Trying 'gl-setup /tmp/fixrepo/gitolite/gitolite-admin/keydir/id_gitolite.pub'
***> [GitHosting] Command failed (return 127): /usr/share/redmine/vendor/plugins/redmine_git_hosting/bin/run_as_git_user "gl-setup /tmp/fixrepo/gitolite/gitolite-admin/keydir/id_gitolite.pub"
***>   -bash: gl-setup: command not found
***> [GitHosting] Failed to reestablish gitolite admin key.
***> Shell Error
[...]
***> [GitHosting] update_repositories() failed

(I left out some stacktrace'y stuff, again: if you need it, I can provide it, but I wanted to avoid bloating this issue).

As you can see above, it still tries to connect to git@localhost instead of [email protected]:[portnr].

I already tried to re-generate the scripts using rake redmine_git_hosting:install_scripts RAILS_ENV=production WEB_USER=www-data, to no avail.

Please let me know if you need any further information.

Thanks in advance,
malexmave

"Repository is empty" after creating new one

Hi, I am using your plugin for a couple of months now. It worked without any problem. Today, I tried to create a new repository. I created a new empty repository in the Redmine interface and initialized it. After push to this new repository, I can see it in the servers filesystem, also pull from other comuters works, but Redmine is still saying, that the repository is empty. Other repositories are working without any problem. The issue is only with this new one.

Hook installed, web user can sudo git user and vice versa (according to the plugin config interface).

running gitolite3 v3.5-0-g4071623 on git 1.7.
Redmine version                          2.2.3.stable
Ruby version                             1.8.7 (i386-linux)
Rails version                            3.2.12
Environment                              production
Database adapter                         MySQL

Thank you for any help in advance.

Sync Tickets with GIT commits

I've noticed that the ticket git associated revisions don't sync up until I click on the repository.
Is there a way to create an auto-sync hook or create a cron job to read the repo ?

No Gitolite Interaction?

Hi,

I'm currently trying to get your plugin running (with Redmine 2.3) but having several issues (which I hope that they are relating to each other...).
What I'm having problems with is the creation of repositories. Two things came into light when I began searching around:
1.) In configuration view, it states that the git command '/usr/share/redmine/plugins/redmine_git_hosting/bin/run_git_as_git_user' cannot be run (even though it works when I switch to www-data, who runs thin, redmine and nginx). I also tried this !requiretty thingy, but it won't change.
2.) I found some strange things in my logs, stating that several commands returned errors.

Do you know, what could be wrong? Possibly just some tiny auth problem, but I cannot figure out where...

Thanks a lot!

Here's my redmine log:

Started POST "/projects" for 127.0.0.1 at 2013-04-19 16:39:49 +0200
Processing by ProjectsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"OwN6vNcxWtqLU3DBzVd94HtdjJsBnhgEi5Zrc3mHzSM=", "project"=>{"name"=>"test-05", "description"=>"", "identifier"=>"test-05", "homepage"=>"", "is_public"=>"1", "parent_id"=>"", "inherit_members"=>"0", "enabled_module_names"=>["issue_tracking", "time_tracking", "news", "documents", "files", "wiki", "repository", "boards", "calendar", "gantt", ""], "tracker_ids"=>["1", "2", "3", ""]}, "commit"=>"Anlegen"}
  Current user: admin (id=1)
Redirected to http://redmine.p5.net/projects/test-05/settings

[GitHosting] Got projects, move on!
[GitHosting] Cloning gitolite-admin repository to /tmp/redmine_git_hosting/git/gitolite-admin
***> ["[GitHosting] Command failed (return 128): env GIT_SSH=/usr/share/redmine/plugins/redmine_git_hosting/bin/gitolite_admin_ssh git clone ssh://git@localhost/gitolite-admin.git /tmp/redmine_git_hosting/git/gitolite-admin"]
***> ["  Cloning into '/tmp/redmine_git_hosting/git/gitolite-admin'...\n  Warning: Identity file ./.ssh/redmine_gitolite_admin_id_rsa not accessible: No such file or directory.\n  Permission denied (publickey,password).\r\n  fatal: The remote end hung up unexpectedly"]
[GitHosting] Attempting to restore repository access key:
[GitHosting] Cloning administrative repo directly as git in /tmp/fixrepo/git/gitolite-admin
[GitHosting] Establishing 'redmine_git_hosting_admin_key.pub' as the redmine_git_hosting administrative key
[GitHosting] Additional administrative key(s): 'admin.pub'
***> ["[GitHosting] Command failed (return 128): /usr/share/redmine/plugins/redmine_git_hosting/bin/run_as_git_user \"git --git-dir='/tmp/fixrepo/git/gitolite-admin/.git' --work-tree='/tmp/fixrepo/git/gitolite-admin' add keydir/*\""]
***> ["  sudo: unable to resolve host server\n  fatal: Not a git repository: ''/tmp/fixrepo/git/gitolite-admin/.git''"]
***> ["[GitHosting] Failed to reestablish gitolite admin key."]
***> ["Shell Error"]
***> ["/usr/share/redmine/plugins/redmine_git_hosting/lib/libs/git_hosting.rb:311:in `shell'\n/usr/share/redmine/plugins/redmine_git_hosting/lib/libs/git_hosting.rb:676:in `fixup_gitolite_admin'\n/usr/share/redmine/plugins/redmine_git_hosting/lib/libs/git_hosting.rb:560:in `rescue in clone_or_pull_gitolite_admin'\n/usr/share/redmine/plugins/redmine_git_hosting/lib/libs/git_hosting.rb:547:in `clone_or_pull_gitolite_admin'\n/usr/share/redmine/plugins/redmine_git_hosting/lib/libs/git_hosting.rb:830:in `update_repositories'\n/usr/share/redmine/plugins/redmine_git_hosting/app/models/git_hosting_observer.rb:32:in `set_update_active'\n/usr/share/redmine/plugins/redmine_git_hosting/lib/redmine_git_hosting/patches/projects_controller_patch.rb:55:in `create_with_disable_update'\n/usr/lib/ruby/vendor_ruby/action_controller/metal/implicit_render.rb:4:in `send_action'\n/usr/lib/ruby/vendor_ruby/abstract_controller/base.rb:167:in `process_action'\n/usr/lib/ruby/vendor_ruby/action_controller/metal/rendering.rb:10:in `process_action'\n/usr/lib/ruby/vendor_ruby/abstract_controller/callbacks.rb:18:in `block in process_action'\n/usr/lib/ruby/vendor_ruby/active_support/callbacks.rb:469:in `_run__103137844__process_action__358340360__callbacks'\n/usr/lib/ruby/vendor_ruby/active_support/callbacks.rb:405:in `__run_callback'\n/usr/lib/ruby/vendor_ruby/active_support/callbacks.rb:385:in `_run_process_action_callbacks'\n/usr/lib/ruby/vendor_ruby/active_support/callbacks.rb:81:in `run_callbacks'\n/usr/lib/ruby/vendor_ruby/abstract_controller/callbacks.rb:17:in `process_action'\n/usr/lib/ruby/vendor_ruby/action_controller/metal/rescue.rb:29:in `process_action'\n/usr/lib/ruby/vendor_ruby/action_controller/metal/instrumentation.rb:30:in `block in process_action'\n/usr/lib/ruby/vendor_ruby/active_support/notifications.rb:123:in `block in instrument'\n/usr/lib/ruby/vendor_ruby/active_support/notifications/instrumenter.rb:20:in `instrument'\n/usr/lib/ruby/vendor_ruby/active_support/notifications.rb:123:in `instrument'\n/usr/lib/ruby/vendor_ruby/action_controller/metal/instrumentation.rb:29:in `process_action'\n/usr/lib/ruby/vendor_ruby/action_controller/metal/params_wrapper.rb:207:in `process_action'\n/usr/lib/ruby/vendor_ruby/active_record/railties/controller_runtime.rb:18:in `process_action'\n/usr/lib/ruby/vendor_ruby/abstract_controller/base.rb:121:in `process'\n/usr/lib/ruby/vendor_ruby/abstract_controller/rendering.rb:45:in `process'\n/usr/lib/ruby/vendor_ruby/action_controller/metal.rb:203:in `dispatch'\n/usr/lib/ruby/vendor_ruby/action_controller/metal/rack_delegation.rb:14:in `dispatch'\n/usr/lib/ruby/vendor_ruby/action_controller/metal.rb:246:in `block in action'\n/usr/lib/ruby/vendor_ruby/action_dispatch/routing/route_set.rb:73:in `call'\n/usr/lib/ruby/vendor_ruby/action_dispatch/routing/route_set.rb:73:in `dispatch'\n/usr/lib/ruby/vendor_ruby/action_dispatch/routing/route_set.rb:36:in `call'\n/usr/lib/ruby/vendor_ruby/journey/router.rb:68:in `block in call'\n/usr/lib/ruby/vendor_ruby/journey/router.rb:56:in `each'\n/usr/lib/ruby/vendor_ruby/journey/router.rb:56:in `call'\n/usr/lib/ruby/vendor_ruby/action_dispatch/routing/route_set.rb:612:in `call'\n/usr/lib/ruby/vendor_ruby/rack/openid.rb:98:in `call'\n/usr/lib/ruby/vendor_ruby/action_dispatch/middleware/best_standards_support.rb:17:in `call'\n/usr/lib/ruby/vendor_ruby/rack/etag.rb:23:in `call'\n/usr/lib/ruby/vendor_ruby/rack/conditionalget.rb:35:in `call'\n/usr/lib/ruby/vendor_ruby/action_dispatch/middleware/head.rb:14:in `call'\n/usr/lib/ruby/vendor_ruby/action_dispatch/middleware/params_parser.rb:21:in `call'\n/usr/lib/ruby/vendor_ruby/action_dispatch/middleware/flash.rb:242:in `call'\n/usr/lib/ruby/vendor_ruby/rack/session/abstract/id.rb:205:in `context'\n/usr/lib/ruby/vendor_ruby/rack/session/abstract/id.rb:200:in `call'\n/usr/lib/ruby/vendor_ruby/action_dispatch/middleware/cookies.rb:341:in `call'\n/usr/lib/ruby/vendor_ruby/active_record/query_cache.rb:64:in `call'\n/usr/lib/ruby/vendor_ruby/active_record/connection_adapters/abstract/connection_pool.rb:479:in `call'\n/usr/lib/ruby/vendor_ruby/action_dispatch/middleware/callbacks.rb:28:in `block in call'\n/usr/lib/ruby/vendor_ruby/active_support/callbacks.rb:405:in `_run__932657714__call__486124949__callbacks'\n/usr/lib/ruby/vendor_ruby/active_support/callbacks.rb:405:in `__run_callback'\n/usr/lib/ruby/vendor_ruby/active_support/callbacks.rb:385:in `_run_call_callbacks'\n/usr/lib/ruby/vendor_ruby/active_support/callbacks.rb:81:in `run_callbacks'\n/usr/lib/ruby/vendor_ruby/action_dispatch/middleware/callbacks.rb:27:in `call'\n/usr/lib/ruby/vendor_ruby/action_dispatch/middleware/remote_ip.rb:31:in `call'\n/usr/lib/ruby/vendor_ruby/action_dispatch/middleware/debug_exceptions.rb:16:in `call'\n/usr/lib/ruby/vendor_ruby/action_dispatch/middleware/show_exceptions.rb:56:in `call'\n/usr/lib/ruby/vendor_ruby/rails/rack/logger.rb:32:in `call_app'\n/usr/lib/ruby/vendor_ruby/rails/rack/logger.rb:16:in `block in call'\n/usr/lib/ruby/vendor_ruby/active_support/tagged_logging.rb:22:in `tagged'\n/usr/lib/ruby/vendor_ruby/rails/rack/logger.rb:16:in `call'\n/usr/lib/ruby/vendor_ruby/action_dispatch/middleware/request_id.rb:22:in `call'\n/usr/lib/ruby/vendor_ruby/rack/methodoverride.rb:21:in `call'\n/usr/lib/ruby/vendor_ruby/rack/runtime.rb:17:in `call'\n/usr/lib/ruby/vendor_ruby/active_support/cache/strategy/local_cache.rb:72:in `call'\n/usr/lib/ruby/vendor_ruby/rack/lock.rb:15:in `call'\n/usr/lib/ruby/vendor_ruby/action_dispatch/middleware/static.rb:63:in `call'\n/usr/lib/ruby/vendor_ruby/rack/cache/context.rb:136:in `forward'\n/usr/lib/ruby/vendor_ruby/rack/cache/context.rb:143:in `pass'\n/usr/lib/ruby/vendor_ruby/rack/cache/context.rb:155:in `invalidate'\n/usr/lib/ruby/vendor_ruby/rack/cache/context.rb:71:in `call!'\n/usr/lib/ruby/vendor_ruby/rack/cache/context.rb:51:in `call'\n/usr/lib/ruby/vendor_ruby/rails/engine.rb:479:in `call'\n/usr/lib/ruby/vendor_ruby/rails/application.rb:223:in `call'\n/usr/lib/ruby/vendor_ruby/rails/railtie/configurable.rb:30:in `method_missing'\n/usr/lib/ruby/vendor_ruby/thin/connection.rb:80:in `block in pre_process'\n/usr/lib/ruby/vendor_ruby/thin/connection.rb:78:in `catch'\n/usr/lib/ruby/vendor_ruby/thin/connection.rb:78:in `pre_process'\n/usr/lib/ruby/vendor_ruby/thin/connection.rb:53:in `process'\n/usr/lib/ruby/vendor_ruby/thin/connection.rb:38:in `receive_data'\n/usr/lib/ruby/vendor_ruby/eventmachine.rb:257:in `run_machine'\n/usr/lib/ruby/vendor_ruby/eventmachine.rb:257:in `run'\n/usr/lib/ruby/vendor_ruby/thin/backends/base.rb:61:in `start'\n/usr/lib/ruby/vendor_ruby/thin/server.rb:159:in `start'\n/usr/lib/ruby/vendor_ruby/thin/controllers/controller.rb:86:in `start'\n/usr/lib/ruby/vendor_ruby/thin/runner.rb:185:in `run_command'\n/usr/lib/ruby/vendor_ruby/thin/runner.rb:151:in `run!'\n/usr/bin/thin:6:in `<main>'"]
***> ["[GitHosting] Cannot clone administrative repository. Requires human intervention !!!"]
***> ["No such file or directory - /tmp/redmine_git_hosting/git/gitolite-admin/keydir"]
***> ["/usr/share/redmine/plugins/redmine_git_hosting/lib/libs/git_hosting.rb:838:in `open'\n/usr/share/redmine/plugins/redmine_git_hosting/lib/libs/git_hosting.rb:838:in `foreach'\n/usr/share/redmine/plugins/redmine_git_hosting/lib/libs/git_hosting.rb:838:in `update_repositories'\n/usr/share/redmine/plugins/redmine_git_hosting/app/models/git_hosting_observer.rb:32:in `set_update_active'\n/usr/share/redmine/plugins/redmine_git_hosting/lib/redmine_git_hosting/patches/projects_controller_patch.rb:55:in `create_with_disable_update'"]
***> ["[GitHosting] update_repositories() failed"]
Expire fragment views/redmine.p5.net/robots.txt (0.0ms)
Completed 302 Found in 1864ms (ActiveRecord: 43.0ms)
Started GET "/projects/test-05/settings" for 127.0.0.1 at 2013-04-19 16:39:50 +0200
Processing by ProjectsController#settings as HTML
  Parameters: {"id"=>"test-05"}
  Current user: admin (id=1)

[GitHosting] Got projects, move on!
[GitHosting] Cloning gitolite-admin repository to /tmp/redmine_git_hosting/git/gitolite-admin
***> ["[GitHosting] Command failed (return 128): env GIT_SSH=/usr/share/redmine/plugins/redmine_git_hosting/bin/gitolite_admin_ssh git clone ssh://git@localhost/gitolite-admin.git /tmp/redmine_git_hosting/git/gitolite-admin"]
***> ["  Cloning into '/tmp/redmine_git_hosting/git/gitolite-admin'...\n  Warning: Identity file ./.ssh/redmine_gitolite_admin_id_rsa not accessible: No such file or directory.\n  Permission denied (publickey,password).\r\n  fatal: The remote end hung up unexpectedly"]
[GitHosting] Attempting to restore repository access key:
[GitHosting] Cloning administrative repo directly as git in /tmp/fixrepo/git/gitolite-admin
[GitHosting] Establishing 'redmine_git_hosting_admin_key.pub' as the redmine_git_hosting administrative key
[GitHosting] Additional administrative key(s): 'admin.pub'
***> ["[GitHosting] Command failed (return 128): /usr/share/redmine/plugins/redmine_git_hosting/bin/run_as_git_user \"git --git-dir='/tmp/fixrepo/git/gitolite-admin/.git' --work-tree='/tmp/fixrepo/git/gitolite-admin' add keydir/*\""]
***> ["  sudo: unable to resolve host server\n  fatal: Not a git repository: ''/tmp/fixrepo/git/gitolite-admin/.git''"]
***> ["[GitHosting] Failed to reestablish gitolite admin key."]
***> ["Shell Error"]
***> ["/usr/share/redmine/plugins/redmine_git_hosting/lib/libs/git_hosting.rb:311:in `shell'\n/usr/share/redmine/plugins/redmine_git_hosting/lib/libs/git_hosting.rb:676:in `fixup_gitolite_admin'\n/usr/share/redmine/plugins/redmine_git_hosting/lib/libs/git_hosting.rb:560:in `rescue in clone_or_pull_gitolite_admin'\n/usr/share/redmine/plugins/redmine_git_hosting/lib/libs/git_hosting.rb:547:in `clone_or_pull_gitolite_admin'\n/usr/share/redmine/plugins/redmine_git_hosting/lib/libs/git_hosting.rb:830:in `update_repositories'\n/usr/share/redmine/plugins/redmine_git_hosting/app/models/git_hosting_observer.rb:32:in `set_update_active'\n/usr/share/redmine/plugins/redmine_git_hosting/lib/redmine_git_hosting/patches/projects_controller_patch.rb:119:in `settings_with_disable_update'\n/usr/lib/ruby/vendor_ruby/action_controller/metal/implicit_render.rb:4:in `send_action'\n/usr/lib/ruby/vendor_ruby/abstract_controller/base.rb:167:in `process_action'\n/usr/lib/ruby/vendor_ruby/action_controller/metal/rendering.rb:10:in `process_action'\n/usr/lib/ruby/vendor_ruby/abstract_controller/callbacks.rb:18:in `block in process_action'\n/usr/lib/ruby/vendor_ruby/active_support/callbacks.rb:480:in `_run__103137844__process_action__417897277__callbacks'\n/usr/lib/ruby/vendor_ruby/active_support/callbacks.rb:405:in `__run_callback'\n/usr/lib/ruby/vendor_ruby/active_support/callbacks.rb:385:in `_run_process_action_callbacks'\n/usr/lib/ruby/vendor_ruby/active_support/callbacks.rb:81:in `run_callbacks'\n/usr/lib/ruby/vendor_ruby/abstract_controller/callbacks.rb:17:in `process_action'\n/usr/lib/ruby/vendor_ruby/action_controller/metal/rescue.rb:29:in `process_action'\n/usr/lib/ruby/vendor_ruby/action_controller/metal/instrumentation.rb:30:in `block in process_action'\n/usr/lib/ruby/vendor_ruby/active_support/notifications.rb:123:in `block in instrument'\n/usr/lib/ruby/vendor_ruby/active_support/notifications/instrumenter.rb:20:in `instrument'\n/usr/lib/ruby/vendor_ruby/active_support/notifications.rb:123:in `instrument'\n/usr/lib/ruby/vendor_ruby/action_controller/metal/instrumentation.rb:29:in `process_action'\n/usr/lib/ruby/vendor_ruby/action_controller/metal/params_wrapper.rb:207:in `process_action'\n/usr/lib/ruby/vendor_ruby/active_record/railties/controller_runtime.rb:18:in `process_action'\n/usr/lib/ruby/vendor_ruby/abstract_controller/base.rb:121:in `process'\n/usr/lib/ruby/vendor_ruby/abstract_controller/rendering.rb:45:in `process'\n/usr/lib/ruby/vendor_ruby/action_controller/metal.rb:203:in `dispatch'\n/usr/lib/ruby/vendor_ruby/action_controller/metal/rack_delegation.rb:14:in `dispatch'\n/usr/lib/ruby/vendor_ruby/action_controller/metal.rb:246:in `block in action'\n/usr/lib/ruby/vendor_ruby/action_dispatch/routing/route_set.rb:73:in `call'\n/usr/lib/ruby/vendor_ruby/action_dispatch/routing/route_set.rb:73:in `dispatch'\n/usr/lib/ruby/vendor_ruby/action_dispatch/routing/route_set.rb:36:in `call'\n/usr/lib/ruby/vendor_ruby/journey/router.rb:68:in `block in call'\n/usr/lib/ruby/vendor_ruby/journey/router.rb:56:in `each'\n/usr/lib/ruby/vendor_ruby/journey/router.rb:56:in `call'\n/usr/lib/ruby/vendor_ruby/action_dispatch/routing/route_set.rb:612:in `call'\n/usr/lib/ruby/vendor_ruby/rack/openid.rb:98:in `call'\n/usr/lib/ruby/vendor_ruby/action_dispatch/middleware/best_standards_support.rb:17:in `call'\n/usr/lib/ruby/vendor_ruby/rack/etag.rb:23:in `call'\n/usr/lib/ruby/vendor_ruby/rack/conditionalget.rb:25:in `call'\n/usr/lib/ruby/vendor_ruby/action_dispatch/middleware/head.rb:14:in `call'\n/usr/lib/ruby/vendor_ruby/action_dispatch/middleware/params_parser.rb:21:in `call'\n/usr/lib/ruby/vendor_ruby/action_dispatch/middleware/flash.rb:242:in `call'\n/usr/lib/ruby/vendor_ruby/rack/session/abstract/id.rb:205:in `context'\n/usr/lib/ruby/vendor_ruby/rack/session/abstract/id.rb:200:in `call'\n/usr/lib/ruby/vendor_ruby/action_dispatch/middleware/cookies.rb:341:in `call'\n/usr/lib/ruby/vendor_ruby/active_record/query_cache.rb:64:in `call'\n/usr/lib/ruby/vendor_ruby/active_record/connection_adapters/abstract/connection_pool.rb:479:in `call'\n/usr/lib/ruby/vendor_ruby/action_dispatch/middleware/callbacks.rb:28:in `block in call'\n/usr/lib/ruby/vendor_ruby/active_support/callbacks.rb:405:in `_run__932657714__call__486124949__callbacks'\n/usr/lib/ruby/vendor_ruby/active_support/callbacks.rb:405:in `__run_callback'\n/usr/lib/ruby/vendor_ruby/active_support/callbacks.rb:385:in `_run_call_callbacks'\n/usr/lib/ruby/vendor_ruby/active_support/callbacks.rb:81:in `run_callbacks'\n/usr/lib/ruby/vendor_ruby/action_dispatch/middleware/callbacks.rb:27:in `call'\n/usr/lib/ruby/vendor_ruby/action_dispatch/middleware/remote_ip.rb:31:in `call'\n/usr/lib/ruby/vendor_ruby/action_dispatch/middleware/debug_exceptions.rb:16:in `call'\n/usr/lib/ruby/vendor_ruby/action_dispatch/middleware/show_exceptions.rb:56:in `call'\n/usr/lib/ruby/vendor_ruby/rails/rack/logger.rb:32:in `call_app'\n/usr/lib/ruby/vendor_ruby/rails/rack/logger.rb:16:in `block in call'\n/usr/lib/ruby/vendor_ruby/active_support/tagged_logging.rb:22:in `tagged'\n/usr/lib/ruby/vendor_ruby/rails/rack/logger.rb:16:in `call'\n/usr/lib/ruby/vendor_ruby/action_dispatch/middleware/request_id.rb:22:in `call'\n/usr/lib/ruby/vendor_ruby/rack/methodoverride.rb:21:in `call'\n/usr/lib/ruby/vendor_ruby/rack/runtime.rb:17:in `call'\n/usr/lib/ruby/vendor_ruby/active_support/cache/strategy/local_cache.rb:72:in `call'\n/usr/lib/ruby/vendor_ruby/rack/lock.rb:15:in `call'\n/usr/lib/ruby/vendor_ruby/action_dispatch/middleware/static.rb:63:in `call'\n/usr/lib/ruby/vendor_ruby/rack/cache/context.rb:136:in `forward'\n/usr/lib/ruby/vendor_ruby/rack/cache/context.rb:245:in `fetch'\n/usr/lib/ruby/vendor_ruby/rack/cache/context.rb:185:in `lookup'\n/usr/lib/ruby/vendor_ruby/rack/cache/context.rb:66:in `call!'\n/usr/lib/ruby/vendor_ruby/rack/cache/context.rb:51:in `call'\n/usr/lib/ruby/vendor_ruby/rails/engine.rb:479:in `call'\n/usr/lib/ruby/vendor_ruby/rails/application.rb:223:in `call'\n/usr/lib/ruby/vendor_ruby/rails/railtie/configurable.rb:30:in `method_missing'\n/usr/lib/ruby/vendor_ruby/thin/connection.rb:80:in `block in pre_process'\n/usr/lib/ruby/vendor_ruby/thin/connection.rb:78:in `catch'\n/usr/lib/ruby/vendor_ruby/thin/connection.rb:78:in `pre_process'\n/usr/lib/ruby/vendor_ruby/thin/connection.rb:53:in `process'\n/usr/lib/ruby/vendor_ruby/thin/connection.rb:38:in `receive_data'\n/usr/lib/ruby/vendor_ruby/eventmachine.rb:257:in `run_machine'\n/usr/lib/ruby/vendor_ruby/eventmachine.rb:257:in `run'\n/usr/lib/ruby/vendor_ruby/thin/backends/base.rb:61:in `start'\n/usr/lib/ruby/vendor_ruby/thin/server.rb:159:in `start'\n/usr/lib/ruby/vendor_ruby/thin/controllers/controller.rb:86:in `start'\n/usr/lib/ruby/vendor_ruby/thin/runner.rb:185:in `run_command'\n/usr/lib/ruby/vendor_ruby/thin/runner.rb:151:in `run!'\n/usr/bin/thin:6:in `<main>'"]
***> ["[GitHosting] Cannot clone administrative repository. Requires human intervention !!!"]
***> ["No such file or directory - /tmp/redmine_git_hosting/git/gitolite-admin/keydir"]
***> ["/usr/share/redmine/plugins/redmine_git_hosting/lib/libs/git_hosting.rb:838:in `open'\n/usr/share/redmine/plugins/redmine_git_hosting/lib/libs/git_hosting.rb:838:in `foreach'\n/usr/share/redmine/plugins/redmine_git_hosting/lib/libs/git_hosting.rb:838:in `update_repositories'\n/usr/share/redmine/plugins/redmine_git_hosting/app/models/git_hosting_observer.rb:32:in `set_update_active'\n/usr/share/redmine/plugins/redmine_git_hosting/lib/redmine_git_hosting/patches/projects_controller_patch.rb:119:in `settings_with_disable_update'"]
***> ["[GitHosting] update_repositories() failed"]
  Rendered projects/_form.html.erb (18.1ms)
  Rendered projects/_edit.html.erb (20.6ms)
  Rendered projects/settings/_modules.html.erb (4.2ms)
  Rendered projects/settings/_members.html.erb (23.5ms)
  Rendered projects/settings/_versions.html.erb (8.2ms)
  Rendered projects/settings/_issue_categories.html.erb (2.9ms)
  Rendered projects/settings/_wiki.html.erb (1.2ms)
  Rendered projects/settings/_repositories.html.erb (2.4ms)
  Rendered projects/settings/_boards.html.erb (2.9ms)
  Rendered projects/settings/_activities.html.erb (12.3ms)
  Rendered common/_tabs.html.erb (87.6ms)
  Rendered projects/settings.html.erb within layouts/base (88.5ms)
Completed 200 OK in 1832ms (Views: 99.7ms | ActiveRecord: 25.8ms)

include in gitolite.conf

I am trying to create a setup so that I can use redmine managed and "normal" repositories at the same time.
In order to increase readability, I wanted to outsource the configuration of the redmine managed repos using "include" in the gitolite.conf.
I set the gitolite config file in the plugin's config to redmine.conf and added
include "redmine.conf"
to gitolite.conf.
As soon as I do so, the plugin does not refresh the configuration file anymore. :(

I tried several configs (only the include in gitolite.conf, not using gitolite.conf at all,...) but I couldn't figure out how to make it work.
Is it working in general? Does anybody have any suggestions how I can fix this setup?

example apache.conf

hi

ruby script/rails server webrick -e production with all run no error

but

LoadModule passenger_module /usr/lib/ruby/gems/1.9.1/gems/passenger-4.0.5/libout/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.9.1/gems/passenger-4.0.5
PassengerDefaultRuby /usr/bin/ruby
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /var/www/redmine/public

plugins configre = 500 internal error

How do I fix error

and http://www.redmine.org/projects/redmine/wiki/Redmine_203_with_Subversion_and_LDAP_Authentication_(for_Redmine_and_Subversion_through_Redmine)_on_Centos_6_i386_-_detailed#Activate-FCGI-and-generate-plugin-directory

does link is useful

[GitHosting] Failed to reestablish gitolite admin key.

HI,

It seems the admin repository cannot be cloned. I've verified file and directory permissions are correct.

[GitHosting] Cloning gitolite-admin repository to /var/www/redmine/tmp/redmine_git_hosting/git/gitolite-admin
**> ["[GitHosting] Command failed (return 128): env GIT_SSH=/var/www/redmine/plugins/redmine_git_hosting/bin/gitolite_admin_ssh git clone ssh://
git@localhost/gitolite-admin.git /var/www/redmine/tmp/redmine_git_hosting/git/gitolite-admin"]
*> [" Cloning into '/var/www/redmine/tmp/redmine_git_hosting/git/gitolite-admin'...\n ssh_exchange_identification: Connection closed by remot
e host\r\n fatal: The remote end hung up unexpectedly"]
[GitHosting] Attempting to restore repository access key:
[GitHosting] Cloning administrative repo directly as git in /tmp/fixrepo/git/gitolite-admin
[GitHosting] Removing orphan administrative key 'noob' from gitolite config file
[GitHosting] Removing orphan administrative key 'git' from gitolite config file
[GitHosting] Establishing 'redmine.pub' as the redmine_git_hosting administrative key
[GitHosting] Additional administrative key(s): 'george.pub'
[GitHosting] Pushing fixes using gl-admin-push
*
> ["[GitHosting] Command failed (return 127): /var/www/redmine/plugins/redmine_git_hosting/bin/run_as_git_user "cd /tmp/fixrepo/git/gitolite-
admin; gl-admin-push -f""]
*> [" -bash: gl-admin-push: command not found"]
*
> ["[GitHosting] gl-admin-push failed (pre 2.0.3 gitolite?). Trying 'gl-setup /tmp/fixrepo/git/gitolite-admin/keydir/redmine.pub'"]
*> ["[GitHosting] Command failed (return 127): /var/www/redmine/plugins/redmine_git_hosting/bin/run_as_git_user "gl-setup /tmp/fixrepo/git/git
olite-admin/keydir/redmine.pub""]
*
> [" -bash: gl-setup: command not found"]
*__> ["[GitHosting] Failed to reestablish gitolite admin key."]
*
*> ["Shell Error"]

Thanks.

Repository Hooks

Hello,

Not really an issue but still a question.

After a fresh install i see "Hook installed ! false" in the config page.

Have i something to do to install ths hooks ?
If yes i didn't find explanation of this install in the README, should you tale a moment to explain please ?

Best regards,

Unable to clone repository through SmartHTTP

Hello,

I make a test installation of redmine (2.3.1) behind nginx as describe by http://www.redmine.org/projects/redmine/wiki/HowTo_configure_Nginx_to_run_Redmine.

Access by SSH is all OK.

I enabled SmartHTTP over HTTP (I have no cert) but I can not clone my repository:

Started GET "/git/sandbox.git/info/refs?service=git-upload-pack" for 127.0.0.1 at 2013-05-15 15:53:55 +0200
Processing by GitHttpController#index as */*
  Parameters: {"service"=>"git-upload-pack", "prefix"=>"git/", "repo_path"=>"git/sandbox.git", "path"=>"info/refs"}
  Current user: anonymous
###### AUTHENTICATION ######
param   : ["info", "refs"]
is_push : false
############################
Filter chain halted as :authenticate rendered or redirected
Completed 404 Not Found in 11ms (ActiveRecord: 2.7ms)
Started GET "/git/sandbox.git/info/refs" for 127.0.0.1 at 2013-05-15 15:53:55 +0200
Processing by GitHttpController#index as */*
  Parameters: {"prefix"=>"git/", "repo_path"=>"git/sandbox.git", "path"=>"info/refs"}
  Current user: anonymous
###### AUTHENTICATION ######
param   : ["info", "refs"]
is_push : false
############################
Filter chain halted as :authenticate rendered or redirected
Completed 404 Not Found in 8ms (ActiveRecord: 1.0ms)

I should have forget something but I do not see what, any hints?

Regards.

AbstractController::ActionNotFound (The action 'public_keys' could not be found for MyController)

Hi,

I am getting this error when trying to add public keys on the "My Account" form:

Started POST "/my/public_keys" for 127.0.0.1 at 2013-03-20 23:01:44 +0000

AbstractController::ActionNotFound (The action 'public_keys' could not be found for MyController):
  vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.13/lib/abstract_controller/base.rb:116:in `process'
  vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.13/lib/abstract_controller/rendering.rb:45:in `process'
  vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.13/lib/action_controller/metal.rb:203:in `dispatch'
  vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.13/lib/action_controller/metal/rack_delegation.rb:14:in `dispatch'
  vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.13/lib/action_controller/metal.rb:246:in `block in action'
  vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.13/lib/action_dispatch/routing/route_set.rb:73:in `call'
  vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.13/lib/action_dispatch/routing/route_set.rb:73:in `dispatch'
  vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.13/lib/action_dispatch/routing/route_set.rb:36:in `call'
  vendor/bundle/ruby/1.9.1/gems/journey-1.0.4/lib/journey/router.rb:68:in `block in call'
  vendor/bundle/ruby/1.9.1/gems/journey-1.0.4/lib/journey/router.rb:56:in `each'
  vendor/bundle/ruby/1.9.1/gems/journey-1.0.4/lib/journey/router.rb:56:in `call'
  vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.13/lib/action_dispatch/routing/route_set.rb:612:in `call'
  vendor/bundle/ruby/1.9.1/gems/rack-openid-1.3.1/lib/rack/openid.rb:98:in `call'
  vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.13/lib/action_dispatch/middleware/best_standards_support.rb:17:in `call'
  vendor/bundle/ruby/1.9.1/gems/rack-1.4.5/lib/rack/etag.rb:23:in `call'
  vendor/bundle/ruby/1.9.1/gems/rack-1.4.5/lib/rack/conditionalget.rb:35:in `call'
  vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.13/lib/action_dispatch/middleware/head.rb:14:in `call'
  vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.13/lib/action_dispatch/middleware/params_parser.rb:21:in `call'
  vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.13/lib/action_dispatch/middleware/flash.rb:242:in `call'
  vendor/bundle/ruby/1.9.1/gems/rack-1.4.5/lib/rack/session/abstract/id.rb:210:in `context'
  vendor/bundle/ruby/1.9.1/gems/rack-1.4.5/lib/rack/session/abstract/id.rb:205:in `call'
  vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.13/lib/action_dispatch/middleware/cookies.rb:341:in `call'
  vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.13/lib/active_record/query_cache.rb:64:in `call'
  vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract/connection_pool.rb:479:in `call'
  vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.13/lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'
  vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.13/lib/active_support/callbacks.rb:405:in `_run__108676195__call__64283820__callbacks'
  vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.13/lib/active_support/callbacks.rb:405:in `__run_callback'
  vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.13/lib/active_support/callbacks.rb:385:in `_run_call_callbacks'

vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.13/lib/active_support/callbacks.rb:81:in `run_callbacks'
  vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.13/lib/action_dispatch/middleware/callbacks.rb:27:in `call'
  vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.13/lib/action_dispatch/middleware/remote_ip.rb:31:in `call'
  vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.13/lib/action_dispatch/middleware/debug_exceptions.rb:16:in `call'
  vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.13/lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'
  vendor/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/rack/logger.rb:32:in `call_app'
  vendor/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/rack/logger.rb:18:in `call'
  vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.13/lib/action_dispatch/middleware/request_id.rb:22:in `call'
  vendor/bundle/ruby/1.9.1/gems/rack-1.4.5/lib/rack/methodoverride.rb:21:in `call'
  vendor/bundle/ruby/1.9.1/gems/rack-1.4.5/lib/rack/runtime.rb:17:in `call'
  vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.13/lib/active_support/cache/strategy/local_cache.rb:72:in `call'
  vendor/bundle/ruby/1.9.1/gems/rack-1.4.5/lib/rack/lock.rb:15:in `call'
  vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.13/lib/action_dispatch/middleware/static.rb:63:in `call'
  vendor/bundle/ruby/1.9.1/gems/rack-cache-1.2/lib/rack/cache/context.rb:136:in `forward'
  vendor/bundle/ruby/1.9.1/gems/rack-cache-1.2/lib/rack/cache/context.rb:143:in `pass'
  vendor/bundle/ruby/1.9.1/gems/rack-cache-1.2/lib/rack/cache/context.rb:155:in `invalidate'
  vendor/bundle/ruby/1.9.1/gems/rack-cache-1.2/lib/rack/cache/context.rb:71:in `call!'
  vendor/bundle/ruby/1.9.1/gems/rack-cache-1.2/lib/rack/cache/context.rb:51:in `call'
  vendor/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/engine.rb:479:in `call'
  vendor/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/application.rb:223:in `call'
  vendor/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/railtie/configurable.rb:30:in `method_missing'

Here's my script/about:

Environment:
  Redmine version                          2.2.4.stable
  Ruby version                             1.9.3 (i686-linux)
  Rails version                            3.2.13
  Environment                              production
  Database adapter                         PostgreSQL
Redmine plugins:
  clipboard_image_paste                    1.5a
  extended_fields                          0.2.1
  latest_issues                            0.0.1
  redcase                                  1.0 alpha 1.8
  redmine_apijs                            4.2.0
  redmine_backlogs                         v0.9.9
  redmine_didyoumean                       1.2.0
  redmine_dropbox_attachments              2.0.0
  redmine_embedded_video                   0.0.3.1
  redmine_git_hosting                      0.6

repository backup and recovery

Hi,

are there any usable instructions for getting a repository restored from a backup? I tried copying the files back, but redmine_git_hosting (latest version) still shows me an empty repo. Permissions are OK and I ran:
rake redmine_git_hosting:fetch_changesets RAILS_ENV=production

Thank you!
Henrik

Smart HTTP access to repositories not working

Hello,

I am trying to access my repositories through https, but getting "Unable to open connection: Host does not exist" error. Connection through ssh works without any problem.

I am connecting to the repo through Git Extensions on Windows 7.

My link looks like this: https://[email protected]/repodir/repo_1.git

I have Smart HTTP enabled only for HTTPS

There is some information about my environment:

Redmine version 2.2.3.stable
Ruby version 1.8.7 (i386-linux)
Rails version 3.2.12
Environment production
Database adapter MySQL

gitolite3 v3.5-0-g4071623 on git 1.7.1

Could anyone help? I thing, this is some issue with my configuration.

Repository is empty if not using the branch master

When using another branch than the master one, the repository page says the repository is empty.

When using the default git adapter, the repository is not empty.

Example (taken from git flow):

> mkdir testempty
> cd testempty
> git init
> git symbolic-ref HEAD "refs/heads/master"
> git commit --allow-empty --quiet -m "Initial commit"
> git branch --no-track "develop" "master"
> git remote add origin [email protected]:testempty.git
> git push --all
 [...]
 * [new branch]      develop -> develop
 * [new branch]      master -> master

Problem with hooks in gitolite.

Hello, when I try to push commit to new bare repository which I created by redmine_git_hosting, then I receive weird bug:

git push origin master
Password for 'https://xxx@xxx':
Counting objects: 743, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (536/536), done.
Writing objects: 100% (743/743), 8.98 MiB | 9.18 MiB/s, done.
Total 743 (delta 298), reused 0 (delta 0)
remote: Empty compile time value given to use lib at hooks/update line 6
remote: Use of uninitialized value in require at hooks/update line 7.
remote: Can't locate Gitolite/Hooks/Update.pm in @INC (@INC contains:  /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl .) at hooks/update line 7.
remote: BEGIN failed--compilation aborted at hooks/update line 7.
remote: error: hook declined to update refs/heads/master
To https://xxx@xxx/redmine/xxx.git
 ! [remote rejected] master -> master (hook declined)
error: failed to push some refs to 'https://xxx@xxx/redmine/xxx.git'

In server log I don't see any bug:

Started POST "/redmine/xxx.git/git-receive-pack" for xxx at 2013-08-07 11:10:38 +0200
Processing by GitHttpController#index as application/x-git-receive-pack-result
  Parameters: {"prefix"=>"", "repo_path"=>"osml.git", "git_params"=>"git-receive-pack"}
  Current user: anonymous
###### AUTHENTICATION ######
git_params : ["git-receive-pack"]
repo_path  : xxx.git
is_push    : true
############################
###### AUTHENTICATED ######
project name    : xxx
repository dir  : repositories/xxx.git
command         : service_rpc
user_name       : xxx
##########################
Completed 200 OK in 1059ms (ActiveRecord: 3.1ms)

Info about my redmine environment:

Environment:
  Redmine version                2.3.2.stable
  Ruby version                   2.0.0-p247 (2013-06-27) [x86_64-linux]
  Rails version                  3.2.13
  Environment                    production
  Database adapter               Mysql2
Redmine plugins:
  redmine_git_hosting            0.6.2
  redmine_graphs                 0.1.0
  redmine_latex_mathjax          0.1.0
  redmine_mylyn_connector        2.8.2.stable

my web server: nginx 1.4.1 and Passenger 4.0.8.

Of course I added this code to Update.pm:

BEGIN {
    exit 0 if exists $ENV{GL_BYPASS_UPDATE_HOOK};
}

For my point of view this bug is related to the permissions/environment path problems. Do you have any ideas/suggestions?

Error on Annotating Files

When calling RepositoriesController#annotate the webserver only answers with status 500.
This is a fresh installation of the latest Redmine release
Entry in Logfile:

Started GET "/projects/nav/repository/test/revisions/8e7bab4ff2b043e7618db405bfb54e443c3955d8/annotate/hello-java.class" for 127.0.0.1 at 2013-04-10 11:16:36 +0200
Processing by RepositoriesController#annotate as HTML
  Parameters: {"id"=>"nav", "repository_id"=>"test", "rev"=>"8e7bab4ff2b043e7618db405bfb54e443c3955d8", "path"=>"hello-java.class"}
  Current user: mfuermann (id=1)
  Rendered plugins/redmine_git_hosting/app/views/repositories/_git_urls.erb (13.0ms)
  Rendered repositories/_navigation.html.erb (56.7ms)
  Rendered repositories/_breadcrumbs.html.erb (4.6ms)
  Rendered repositories/_link_to_functions.html.erb (3.3ms)
  Rendered repositories/annotate.html.erb within layouts/base (89.7ms)
Completed 500 Internal Server Error in 175ms

ActionView::Template::Error (incompatible character encodings: ASCII-8BIT and UTF-8):
    21:         <td class="revision">
    22:         <%= (revision.identifier ? link_to_revision(revision, @repository) : format_revision(revision)) if revision && revision != previous_revision %></td>
    23:         <td class="author"><%= h(revision.author.to_s.split('<').first) if revision && revision != previous_revision %></td>
    24:         <td class="line-code"><pre><%= line.html_safe %></pre></td>
    25:       </tr>
    26:       <% line_num += 1; previous_revision = revision %>
    27:     <% end %>
  app/views/repositories/annotate.html.erb:24:in `block in _app_views_repositories_annotate_html_erb___2234380482544638963_70513740'
  app/views/repositories/annotate.html.erb:17:in `each'
  app/views/repositories/annotate.html.erb:17:in `_app_views_repositories_annotate_html_erb___2234380482544638963_70513740'

smart HTTP jgit eclipse

This change to git_http_controller.rb helped us to get the git-plugin of eclipse working.
Problem was the automatically appended charset=UTF-8 for the Content-Transfer-Encoding.
This discussion http://stackoverflow.com/questions/3433059/remove-charset-from-rails-content-type helped us to fix it.

Please consider to change the code accordingly:

diff --git a/app/controllers/git_http_controller.rb b/app/controllers/git_http_controller.rb
index 27e1f6d..e25561d 100644
--- a/app/controllers/git_http_controller.rb
+++ b/app/controllers/git_http_controller.rb
@@ -159,6 +159,7 @@ class GitHttpController < ApplicationController

       self.response.status = 200
       self.response.headers["Content-Type"] = content_type
+      self.response.headers["Content-Transfer-Encoding"] = "binary"
       hdr_nocache

       if Rails::VERSION::MAJOR >= 3

Thank you for this great plugin!

Add support for HTTP users / do not force users to have SSH keys

It appears that this plugin only works with SSH Pubkeys. If I do not add one, the "redmine_dummy_key" is being added while otherwise its a redmine_username_xxx_xxx value.

There does not appear to be a way to simply add the username and deal with the handling somewhere else, in my case this is nginx where the username is just that.

Performance problems with this plugin

Hi all,
After installation of this plugin we were facing a massive login delay. I am not sure if we configured the plugin somehow incorrect but the login delay increased from 1s to 15s after installation. The delay comes from the fact that the plugin performs a DB (MySQL) to gitolite ACL sync on every repo the user has access when login. Did someone else observe a similar or the same issue.
Could provide further information and would help debugging the issue. Would it be possible to perform the sync somehow in background.

/----
-> System : Ubuntu 12.04 (VM with 4 cores 16GB Memory)
-> Redmine 2.3.1 uses Apache2 with Passenger (4 free version), followed the installation on Redmine Wiki
-> Repos on NFS Share (direct attached to the Hypervisor over direct link)
-> DB MySQL

Cheers

Setup post-receive-email Git hook with Gitolite

It would be very nice if you can add options to configure hooks.mailinglist and hooks.emailprefix in Repositories Settings. This should generate following lines in conf/gitolite.conf:

repo gitolite-test
    config hooks.mailinglist = [email protected]
    config hooks.emailprefix = "[gitolite] "

Similar setup can be used for custom hook that can enforce Git policy. This can be used to check properly formated commit log message. Some more info:
http://git-scm.com/book/ch7-4.html

Internal Error 500 with Redmine 2.3.2

Hi,

Since I have update my redmine to 2.3.2, I could not access to "my account".
I receive "Error 500 - Internal Error".

Thanks for help;
Yannick

Smart HTTP authentication only works with login/password in URL

Hello,

In my new redmine test setup, I don't manage to get Smart HTTP authentication working normally.

It looks like authenticate_or_request_with_http_basic only accept login/password passed in URL like in git push http://user:[email protected]/git/repository.git master.

If I do not pass them in the URL (or just the user), git does not ask for username and/or password.

I have an older redmine behind an apache with passenger, and apache serves successfully the git with the following configuration:

        PerlAccessHandler Apache::Authn::Redmine::access_handler
        PerlAuthenHandler Apache::Authn::Redmine::authen_handler

With that setup, I can push with:

  • git push http://redmine.host/git/repository.git master: ask both user name and password
  • git push http://[email protected]/git/repository.git master: ask only for password
  • git push http://user:[email protected]/git/repository.git master: ask nothing.

Looking the network with wireshark, the only differences I see is the HTTP Response Phrase and the WWW-Authenticate: Basic realm:

For apache:

Hypertext Transfer Protocol
    HTTP/1.1 401 Authorization Required\r\n
        [Expert Info (Chat/Sequence): HTTP/1.1 401 Authorization Required\r\n]
            [Message: HTTP/1.1 401 Authorization Required\r\n]
            [Severity level: Chat]
            [Group: Sequence]
        Request Version: HTTP/1.1
        Status Code: 401
        Response Phrase: Authorization Required
    Date: Wed, 22 May 2013 10:02:26 GMT\r\n
    Server: Apache/2.2.16 (Debian)\r\n
    WWW-Authenticate: Basic realm="git"\r\n
    Vary: Accept-Encoding\r\n
    Content-Length: 487\r\n
        [Content length: 487]
    Content-Type: text/html; charset=iso-8859-1\r\n
    \r\n

For nginx:

Hypertext Transfer Protocol
    HTTP/1.1 401 Unauthorized\r\n
        [Expert Info (Chat/Sequence): HTTP/1.1 401 Unauthorized\r\n]
            [Message: HTTP/1.1 401 Unauthorized\r\n]
            [Severity level: Chat]
            [Group: Sequence]
        Request Version: HTTP/1.1
        Status Code: 401
        Response Phrase: Unauthorized
    Server: nginx/1.2.1\r\n
    Date: Wed, 22 May 2013 10:08:46 GMT\r\n
    Content-Type: text/html; charset=utf-8\r\n
    Transfer-Encoding: chunked\r\n
    Connection: keep-alive\r\n
    WWW-Authenticate: Basic realm="Application"\r\n
    X-UA-Compatible: IE=Edge,chrome=1\r\n
    Cache-Control: no-cache\r\n
    X-Request-Id: 809c179650f865a555fa0153a6c85db4\r\n
    X-Runtime: 0.266892\r\n
    X-Rack-Cache: invalidate, pass\r\n
    \r\n
    HTTP chunked response
        Data chunk (27 octets)
            Chunk size: 27 octets
            Data (27 bytes)

0000  48 54 54 50 20 42 61 73 69 63 3a 20 41 63 63 65   HTTP Basic: Acce
0010  73 73 20 64 65 6e 69 65 64 2e 0a                  ss denied..
                Data: 485454502042617369633a204163636573732064656e6965...
                [Length: 27]
            Chunk boundary
        End of chunked encoding
            Chunk size: 0 octets
            Chunk boundary

Smart HTTP

Hi the smart http is not working with git-1.8.1.x with git-1.8.0.x it's working fine.

In the logs it stops after:

##########################
###### AUTHENTICATED ######
project name   : xxxsperskyapp.git
repository path: xxx.git
is_push        : false
user_name      : mfulz
command        : get_info_refs
##########################
###### GET INFO REFS ######
command      : /srv/www/htdocs/chiliproject/vendor/plugins/redmine_git_hosting/bin/gitolite/bin/run_as_git_user 'cd repositories/xxx.git ;  env GL_BYPASS_UPDATE_HOOK=true git upload-pack --stateless-rpc --advertise-refs . '
refs         : 00b77b4a18c27d0590e9e09ef59821de3bc417e38b0c HEADmulti_ack thin-pack side-band side-band-64k ofs-delta shallow no-progress include-tag multi_ack_detailed no-done agent=git/1.8.3-rc3
003f7b4a18c27d0590e9e09ef59821de3bc417e38b0c refs/heads/master
0045bbb7a8ed0d36daab1c6fb0357aa3aa5b5d8353c7 refs/tags/v0.1_prealpha
0000
content_type : application/x-git-upload-pack-advertisement
service_name : upload-pack
###########################
Completed in 47ms (View: 0, DB: 1) | 200 OK [https://dev.olznet.de/xxx.git/info/refs?service=git-upload-pack]

On the client side this error is thrown:

fatal: https://[email protected]/xxx.git/info/refs not valid: is this a git repository?

With git-1.8.0.x this is happening:

###### AUTHENTICATED ######
project name   : bttrtools
repository dir : repositories/bttr/bttrtools.git
repository path: bttr/bttrtools.git
is_push        : false
user_name      : mfulz
command        : get_info_refs
##########################
###### GET INFO REFS ######
command      : /srv/www/htdocs/chiliproject/vendor/plugins/redmine_git_hosting/bin/gitolite/bin/run_as_git_user 'cd repositories/bttr/bttrtools.git ;  env GL_BYPASS_UPDATE_HOOK=true git upload-pack --stateless-rpc --advertise-refs . '
refs         : 00b7afe3756db260d89e4353e4ee5bbe35258f15ebe2 HEADmulti_ack thin-pack side-band side-band-64k ofs-delta shallow no-progress include-tag multi_ack_detailed no-done agent=git/1.8.3-rc3
003fafe3756db260d89e4353e4ee5bbe35258f15ebe2 refs/heads/master
0000
content_type : application/x-git-upload-pack-advertisement
service_name : upload-pack
###########################
Completed in 49ms (View: 1, DB: 1) | 200 OK [https://dev.olznet.de/bttr/bttrtools.git/info/refs?service=git-upload-pack]


Processing GitHttpController#index (for 188.194.107.193 at 2013-06-01 04:05:08) [POST]
  Parameters: {"repo_path"=>"bttr/bttrtools.git", "prefix"=>"", "controller"=>"git_http", "action"=>"index", "path"=>["git-upload-pack"]}
###### AUTHENTICATION ######
param   : git-upload-pack
is_push : false
############################
######## ROUTING #########
path      : bttr/bttrtools.git
path info : /bttr/bttrtools.git/git-upload-pack
file      : /git-upload-pack
rpc       : upload-pack
##########################
###### AUTHENTICATED ######
project name   : bttrtools
repository dir : repositories/bttr/bttrtools.git
repository path: bttr/bttrtools.git
is_push        : false
user_name      : mfulz
command        : service_rpc
##########################
###### SERVICE RPC ######
command    : /srv/www/htdocs/chiliproject/vendor/plugins/redmine_git_hosting/bin/gitolite/bin/run_as_git_user 'cd repositories/bttr/bttrtools.git ;  env GL_BYPASS_UPDATE_HOOK=true git upload-pack --stateless-rpc . '
#########################
Completed in 30ms (View: 1, DB: 1) | 200 OK [https://dev.olznet.de/bttr/bttrtools.git/git-upload-pack]

I'm not sure how to debug it in a better way, please could you have a look?

Strange behaviour with hook (redmine 1.4.4 & gitolite 2.3)

Hello,

I have a strange behaviour with Redmine 1.4.4 & gitolite 2.3 when I push a commit :

Counting objects: 5, done.
Writing objects: 100% (3/3), 252 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: 
remote: 
remote: 
remote: The hook key provided is not valid. Please let your server admin know about it
remote: 
remote: 
To [email protected]:test.git
   c170439..3fcb4a2  master -> master

I look on this file app/controllers/gitolite_hooks_controller.rb :

if not @repository.extra.validate_encoded_time(params[:clear_time], params[:encoded_time])
  render(:text => "The hook key provided is not valid. Please let your server admin know about it")
  return
end

And I don't understand this condition.
I temporarly commented these lines to continue to use your great plugin and It works.

Could you explain me what probably is wrong in my conf or on this code ?

Thanks a lot in advance.

Regards,

Different access levels

I'm not sure if this is a proper issue, but shouldn't this plugin allow for different access levels for the members of a project?

I just installed and configure this plugins, and all members of a project gets RW+ permission on gitolite, regardless of their role in the project or which are his role's permissions.

Is this the expected behavior? Is there any way to set which users can clone and which can commit?

Support installation with a different user

Hello,

I'm installing a new 2.3.2 redmine with HEAD redmine_git_hosting:

  • redmine is installed by system user system
  • redmine runs under system user redmine with thin
  • permissions are given to redmine on specific directories to run

After running as user system

system@server:/srv/redmine$ RAILS_ENV=production rake redmine:plugins:migrate

the temporary directory used by redmine_git_hosting is /home/system/tmp/redmine_git_hosting/.

I cannot configure the plugins to choose another directory because the server produce an error when entering the plugin settings.

I found some references to ENV['HOME'] and I wonder if the plugin should not accept a WEB_USER for its initialization, like

system@server:/srv/redmine$ RAILS_ENV=production WEB_USER=redmine rake redmine:plugins:migrate
system@server:/srv/redmine$ RAILS_ENV=production WEB_USER=redmine rake redmine_git_hosting:install_scripts

If WEB_USER is not set, then default to ENV['USER'] and ENV['HOME']

I think that getting the home of a user should use something like getent (I don't know if ruby has a generic mechanism for this) and fallback to ENV.

Predictable gitolite usernames

Is is possible to have predictable (and probably friendly) users in gitolite being generated by this plugin? This will be useful for scenarios in which this plugin should be bypassed (Like user created repos in gitolite. )

Write access not revoked on closed project

Versions:
Redmine 2.3.1.stable
redmine_git_hosting 0.6.2
gitolite3 v3.5.1-5-g412d9ab
git 1.7.9.5

After closing a project in Redmine, the git URL on the project overview page shows "This URL has Read-Only access." to users that previously had commit permissions.

Gitolite still shows RW permissions and allows commits to the repository.

I would be happy to provide other details or try some additional debugging.

-Travis

Can not save settings after update

I updated redmine and the redmine_git_hosting
And most things seem to work just fine, however when I tried to safe the settings for the Redmine Git Hosting Plugin I get a internal server-error

This is what shows up in the production.log

Started POST "/redmine/settings/plugin/redmine_git_hosting" for 172.16.100.9 at 2013-05-17 10:37:50 +0200
Processing by SettingsController#plugin as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"4x8MEpmZpuIFsojp5YSl9Hi3BYBgWgxA3z1Y4MRYf6M=", "settings"=>{"gitLockWaitTime"=>"10", "gitTempDataDir"=>"/tmp/redmine_git_hosting/", "gitScriptDir"=>"./", "gitUser"=>"gitolite", "gitoliteIdentityFile"=>"/usr/share/redmine/.ssh/gitolite_admin_id_rsa", "gitoliteIdentityPublicKeyFile"=>"/usr/share/redmine/.ssh/gitolite_admin_id_rsa.pub", "sshServerLocalPort"=>"22", "gitConfigFile"=>"./gitolite.conf", "gitConfigHasAdminKey"=>"true", "gitRepositoryBasePath"=>"./repositories/", "gitRedmineSubdir"=>"./", "gitRepositoryHierarchy"=>"true", "gitRepositoryIdentUnique"=>"true", "allProjectsUseGit"=>"true", "gitDaemonDefault"=>"1", "gitHttpDefault"=>"1", "gitNotifyCIADefault"=>"0", "deleteGitRepositories"=>"false", "gitRecycleBasePath"=>"./recycle_bin/", "gitRecycleExpireTime"=>"24.0", "gitServer"=>"sms.intersoft-electronics.com", "httpServer"=>"sms.intersoft-electronics.com", "httpServerSubdir"=>"./", "gitRepositoriesShowUrl"=>"true", "gitCacheMaxElements"=>"100", "gitCacheMaxSize"=>"16", "gitCacheMaxTime"=>"-1", "gitHooksAreAsynchronous"=>"true", "gitHooksDebug"=>"false", "gitForceHooksUpdate"=>"true"}, "commit"=>"Apply", "id"=>"redmine_git_hosting"}
  Current user: david (id=6)
Completed 500 Internal Server Error in 20ms

ActiveRecord::SubclassNotFound (The single-table inheritance mechanism failed to locate the subclass: 'Git'. This error is raised because the column 'type' is reserved for storing the class in case of inheritance. Please rename this column if you didn't intend it to be used for storing the inheritance class or overwrite Repository.inheritance_column to use another column for that information.):
  app/models/setting.rb:115:in `[]='
  app/models/setting.rb:145:in `plugin_redmine_git_hosting='
  app/controllers/settings_controller.rb:63:in `plugin'

Can't acces "my account"

I use the latest githosting plugin, with the latest stable release of chiliproject. My ruby version is 1.9.3 on Debian 7.0.

I wasn't able to access the "my_account" page.

Error:

ActionView::TemplateError (undefined method `labelled_form_for' for #<ActionView::Base:0xa1c8d88>)

Fix (git diff):

diff --git a/app/views/gitolite_public_keys/_view.html.erb b/app/views/gitolite_public_keys/_view.html.erb
index a82452d..a18e701 100644
--- a/app/views/gitolite_public_keys/_view.html.erb
+++ b/app/views/gitolite_public_keys/_view.html.erb
@@ -54,7 +54,7 @@
   <fieldset class="public_key_view">
     <legend><%= @new_key ? l(:label_public_key_new) : l(:label_public_key_edit) %></legend>
     <div id="validation_messages"><%= error_messages_for 'gitolite_public_key' %></div>
-    <% form = labelled_form_for @gitolite_public_key,
+    <% form = form_for @gitolite_public_key,
         :as => :gitolite_public_key,
         :url=>{:controller=>'gitolite_public_keys', :action=>@new_key ? 'create' : 'update', :id=>@gitolite_public_key.id, :user_id=>params[:id], :tab => par
         :html => {:method=>(@new_key ? :post : :put)} do |f| %>
diff --git a/app/views/my/account.html.erb b/app/views/my/account.html.erb
index c0560b1..2c221f9 100644
--- a/app/views/my/account.html.erb
+++ b/app/views/my/account.html.erb
@@ -8,7 +8,7 @@
 <%= error_messages_for 'user' %>

 <div class="splitcontentleft">
-  <% form = labelled_form_for :user, @user,
+  <% form = form_for :user, @user,
                :url => { :action => "account" },
                :html => { :id => 'my_account_form', :method => :post } do |f| %>

Hop it will help,
And thanks for the plugin BTW !
Colin

XSS in gitolite_hooks controller

The find_project_and_repository does not properly escape user input, when generating an error message.

.i.e this call

def find_project_and_repository
    @project = Project.find_by_identifier(params[:projectid])
    if @project.nil?
      render(:text => l(:project_not_found, :identifier => params[:projectid])) if @project.nil?
      return
    end

will return anything that was input as projectid, e.g. a link, javascript, whatever

This issue should not occur with rails3 afaik because there render output is escaped by default.

Smart HTTP path parameter strange behaviour

Hi, I'm new to redmine, to ruby and to git, so excuse me if I make any big mistake in the following description:

I have problems getting authenticated when I try to access git trough smart http, I'll try to describe the problem:
(Note: when I say 'project' I mean the redmine project who's repo I'm working with)

When I try to PUSH a new commit to a PUBLIC project:
if origin url is http://user@domain/repo.git, I don't get prompted for a password and get the 401 error. When the url is http://domain/repo.git I don't get prompted for neither the user nor the password.
When I try to push a new commit to a PRIVATE project:
Never mind the origin url, git asks me for the missing info (user & psw if I entered none, or psw if I entered the user in the url)

When I started searching the code and logs, I noticed something pretty strange (at least for me):
When I push to a PRIVATE project, the header is the following (quote from logs):

Started GET "/repo_fifthtest.git/info/refs?service=git-receive-pack" for >192.168.209.134 at 2013-05-23 12:05:33 -0400
Processing by GitHttpController#index as */*
Parameters: {"service"=>"git-receive-pack", "prefix"=>"", >"repo_path"=>"repo_fifthtest.git", "path"=>"info/refs"}
Current user: anonymous
###### AUTHENTICATION ######
param   : ["info", "refs"]
is_push : false
############################

Here, you can notice that is_push is false while it should be true, this is because in the code the is_push variable is defined by looking for 'git-receive-pack' in "path" but when we push to a private project, the 'git-receive-pack' info it's in the "service" parameter.

Now, when i do the same push to a PUBLIC project, the header is:

Started POST "/repo_fifthtest.git/git-receive-pack" for 192.168.209.134 at 2013-05-23 >12:21:29 -0400
Processing by GitHttpController#index as application/x-git-receive-pack-result
Parameters: {"prefix"=>"", "repo_path"=>"repo_fifthtest.git", "path"=>"git-receive-pack"}

Now the 'git-receive-pack' is in "path" parameter, and of course, is_push becomes true.

I think that the code should look for 'git-receive-pack' on both variables, or better, find a way to get the type of git service always in the same variable.

So, why this is happening? (I mean, the only thing that changes is the public/private on the redmine project, nothing was changed to the git repo directly)
What's the incidence this can have on my problem?

Thanks, and sorry for the bad quality English!

Internal error 500 when clicking Configure in Redmine

# ls -l /root/tmp/
total 4
drwxrwx--- 2 www-data www-data 4096 May 20 21:33 redmine_git_hosting
/var/www/redmine/log/production.log:ActionView::Template::Error (Permission denied - /root/tmp/redmine_git_hosting/git/redmine_git_hosting_lock)

any clue ? (i really don't want to learn all ruby on rails to install this)

self.gitolite_version and ssh banner

If there is an ssh login banner, then

def self.gitolite_version in lib/libs/git_hosting.rb returns a -1 because Open3.popen3 places the ssh banner into stderr.

The code returns a -1 if stder is not blank causing 'Hooks Installed' check in the plugin configs to fail.

Also the line

if line.include?('gitolite v2.') 

does not work since gitolite returns:
hello gitolite_admin_id_rsa, this is gitolite 2.3.1-1.el6 running on git 1.7.1

in my case. Notice the lack of the 'v' in the greeting statement that gitolite returns in version 2.3.1

Error while creating new repository

Hello everyone,

I have finally solved some issues I had with configuring this plugin and now I can create a repository through redmine. But I got this error when I try to do so. Even though I get this error, repository seems to work.

The only problem is, that the pushes do not appear in the redmine. I can only see the first one, but have two.

Could you, please help? I really like your plugin and would like to use git with gitolite.

I am attaching my log:

Started GET "/projects/web_nemoinspekt/repositories/new" for 78.128.196.91 at Sun Mar 24 22:41:36 +0100 2013
Processing by RepositoriesController#new as HTML
  Parameters: {"project_id"=>"web_nemoinspekt"}
  Current user: admin (id=1)
  Rendered plugins/redmine_git_hosting/app/views/repositories/_form.html.erb (8.7ms)
  Rendered repositories/new.html.erb within layouts/base (11.0ms)
Completed 200 OK in 82ms (Views: 54.6ms | ActiveRecord: 6.2ms)
Started POST "/projects/web_nemoinspekt/repositories" for 78.128.196.91 at Sun Mar 24 22:41:57 +0100 2013
Processing by RepositoriesController#create as HTML
  Parameters: {"authenticity_token"=>"#################################", "repository"=>{"identifier"=>"nemoinspekt_web", "is_default"=>"1"}, "commit"=>"Create", "utf8"=>"â", "project_id"=>"web_nemoinspekt", "repository_scm"=>"Git", "extra"=>{"notify_cia"=>"0", "git_http"=>"1"}}
  Current user: admin (id=1)
Redirected to http://redmine.ibento.cz/projects/web_nemoinspekt/settings?tab=repositories

[GitHosting] Got projects, move on!
[GitHosting] Cloning gitolite-admin repository to /tmp/redmine_git_hosting/gitolite3/gitolite-admin
***> [GitHosting] Command failed (return 128): env GIT_SSH=/var/www/vhosts/ibento.cz/subdomains/redmine/plugins/redmine_git_hosting/bin/gitolite_admin_ssh git clone ssh://gitolite3@localhost/gitolite-admin.git /tmp/redmine_git_hosting/gitolite3/gitolite-admin
***>   Initialized empty Git repository in /tmp/redmine_git_hosting/gitolite3/gitolite-admin/.git/
***>   FATAL: R any gitolite-admin id_rsa DENIED by fallthru
***>   (or you mis-spelled the reponame)
***>   fatal: The remote end hung up unexpectedly
Attempting to restore repository access key:
  Cloning administrative repo directly as gitolite3 in /tmp/fixrepo/gitolite3/gitolite-admin
***> Failed to reestablish gitolite admin key.
***> undefined method `repository_base' for GitHosting:Module
***> /var/www/vhosts/ibento.cz/subdomains/redmine/plugins/redmine_git_hosting/lib/libs/git_hosting.rb:612:in `fixup_gitolite_admin'
***> /var/www/vhosts/ibento.cz/subdomains/redmine/plugins/redmine_git_hosting/lib/libs/git_hosting.rb:555:in `clone_or_pull_gitolite_admin'
***> /var/www/vhosts/ibento.cz/subdomains/redmine/plugins/redmine_git_hosting/lib/libs/git_hosting.rb:825:in `update_repositories'
***> /var/www/vhosts/ibento.cz/subdomains/redmine/plugins/redmine_git_hosting/app/models/git_hosting_observer.rb:32:in `set_update_active'
***> /var/www/vhosts/ibento.cz/subdomains/redmine/plugins/redmine_git_hosting/lib/redmine_git_hosting/patches/repositories_controller_patch.rb:73:in `create'
***> /usr/lib/ruby/gems/1.8/gems/actionpack-3.2.12/lib/action_controller/metal/implicit_render.rb:4:in `send_action'
***> /usr/lib/ruby/gems/1.8/gems/actionpack-3.2.12/lib/action_controller/metal/implicit_render.rb:4:in `send_action'
***> /usr/lib/ruby/gems/1.8/gems/actionpack-3.2.12/lib/abstract_controller/base.rb:167:in `process_action'
***> /usr/lib/ruby/gems/1.8/gems/actionpack-3.2.12/lib/action_controller/metal/rendering.rb:10:in `process_action'
***> /usr/lib/ruby/gems/1.8/gems/actionpack-3.2.12/lib/abstract_controller/callbacks.rb:18:in `process_action'
***> /usr/lib/ruby/gems/1.8/gems/activesupport-3.2.12/lib/active_support/callbacks.rb:480:in `_run__512672853__process_action__285969602__callbacks'
***> /usr/lib/ruby/gems/1.8/gems/activesupport-3.2.12/lib/active_support/callbacks.rb:405:in `send'
***> /usr/lib/ruby/gems/1.8/gems/activesupport-3.2.12/lib/active_support/callbacks.rb:405:in `__run_callback'
***> /usr/lib/ruby/gems/1.8/gems/activesupport-3.2.12/lib/active_support/callbacks.rb:385:in `_run_process_action_callbacks'
***> /usr/lib/ruby/gems/1.8/gems/activesupport-3.2.12/lib/active_support/callbacks.rb:81:in `send'
***> /usr/lib/ruby/gems/1.8/gems/activesupport-3.2.12/lib/active_support/callbacks.rb:81:in `run_callbacks'
***> /usr/lib/ruby/gems/1.8/gems/actionpack-3.2.12/lib/abstract_controller/callbacks.rb:17:in `process_action'
***> /usr/lib/ruby/gems/1.8/gems/actionpack-3.2.12/lib/action_controller/metal/rescue.rb:29:in `process_action'
***> /usr/lib/ruby/gems/1.8/gems/actionpack-3.2.12/lib/action_controller/metal/instrumentation.rb:30:in `process_action'
***> /usr/lib/ruby/gems/1.8/gems/activesupport-3.2.12/lib/active_support/notifications.rb:123:in `instrument'
***> /usr/lib/ruby/gems/1.8/gems/activesupport-3.2.12/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
***> /usr/lib/ruby/gems/1.8/gems/activesupport-3.2.12/lib/active_support/notifications.rb:123:in `instrument'
***> /usr/lib/ruby/gems/1.8/gems/actionpack-3.2.12/lib/action_controller/metal/instrumentation.rb:29:in `process_action'
***> /usr/lib/ruby/gems/1.8/gems/actionpack-3.2.12/lib/action_controller/metal/params_wrapper.rb:207:in `process_action'
***> /usr/lib/ruby/gems/1.8/gems/activerecord-3.2.12/lib/active_record/railties/controller_runtime.rb:18:in `process_action'
***> /usr/lib/ruby/gems/1.8/gems/actionpack-3.2.12/lib/abstract_controller/base.rb:121:in `process'
***> /usr/lib/ruby/gems/1.8/gems/actionpack-3.2.12/lib/abstract_controller/rendering.rb:45:in `process'
***> /usr/lib/ruby/gems/1.8/gems/actionpack-3.2.12/lib/action_controller/metal.rb:203:in `dispatch'
***> /usr/lib/ruby/gems/1.8/gems/actionpack-3.2.12/lib/action_controller/metal/rack_delegation.rb:14:in `dispatch'
***> /usr/lib/ruby/gems/1.8/gems/actionpack-3.2.12/lib/action_controller/metal.rb:246:in `action'
***> /usr/lib/ruby/gems/1.8/gems/actionpack-3.2.12/lib/action_dispatch/routing/route_set.rb:73:in `call'
***> /usr/lib/ruby/gems/1.8/gems/actionpack-3.2.12/lib/action_dispatch/routing/route_set.rb:73:in `dispatch'
***> /usr/lib/ruby/gems/1.8/gems/actionpack-3.2.12/lib/action_dispatch/routing/route_set.rb:36:in `call'
***> /usr/lib/ruby/gems/1.8/gems/journey-1.0.4/lib/journey/router.rb:68:in `call'
***> /usr/lib/ruby/gems/1.8/gems/journey-1.0.4/lib/journey/router.rb:56:in `each'
***> /usr/lib/ruby/gems/1.8/gems/journey-1.0.4/lib/journey/router.rb:56:in `call'
***> /usr/lib/ruby/gems/1.8/gems/actionpack-3.2.12/lib/action_dispatch/routing/route_set.rb:601:in `call'
***> /usr/lib/ruby/gems/1.8/gems/rack-openid-1.3.1/lib/rack/openid.rb:98:in `call'
***> /usr/lib/ruby/gems/1.8/gems/actionpack-3.2.12/lib/action_dispatch/middleware/best_standards_support.rb:17:in `call'
***> /usr/lib/ruby/gems/1.8/gems/rack-1.4.5/lib/rack/etag.rb:23:in `call'
***> /usr/lib/ruby/gems/1.8/gems/rack-1.4.5/lib/rack/conditionalget.rb:35:in `call'
***> /usr/lib/ruby/gems/1.8/gems/actionpack-3.2.12/lib/action_dispatch/middleware/head.rb:14:in `call'
***> /usr/lib/ruby/gems/1.8/gems/actionpack-3.2.12/lib/action_dispatch/middleware/params_parser.rb:21:in `call'
***> /usr/lib/ruby/gems/1.8/gems/actionpack-3.2.12/lib/action_dispatch/middleware/flash.rb:242:in `call'
***> /usr/lib/ruby/gems/1.8/gems/rack-1.4.5/lib/rack/session/abstract/id.rb:210:in `context'
***> /usr/lib/ruby/gems/1.8/gems/rack-1.4.5/lib/rack/session/abstract/id.rb:205:in `call'
***> /usr/lib/ruby/gems/1.8/gems/actionpack-3.2.12/lib/action_dispatch/middleware/cookies.rb:341:in `call'
***> /usr/lib/ruby/gems/1.8/gems/activerecord-3.2.12/lib/active_record/query_cache.rb:64:in `call'
***> /usr/lib/ruby/gems/1.8/gems/activerecord-3.2.12/lib/active_record/connection_adapters/abstract/connection_pool.rb:479:in `call'
***> /usr/lib/ruby/gems/1.8/gems/actionpack-3.2.12/lib/action_dispatch/middleware/callbacks.rb:28:in `call'
***> /usr/lib/ruby/gems/1.8/gems/activesupport-3.2.12/lib/active_support/callbacks.rb:405:in `_run__657775768__call__4__callbacks'
***> /usr/lib/ruby/gems/1.8/gems/activesupport-3.2.12/lib/active_support/callbacks.rb:405:in `send'
***> /usr/lib/ruby/gems/1.8/gems/activesupport-3.2.12/lib/active_support/callbacks.rb:405:in `__run_callback'
***> /usr/lib/ruby/gems/1.8/gems/activesupport-3.2.12/lib/active_support/callbacks.rb:385:in `_run_call_callbacks'
***> /usr/lib/ruby/gems/1.8/gems/activesupport-3.2.12/lib/active_support/callbacks.rb:81:in `send'
***> /usr/lib/ruby/gems/1.8/gems/activesupport-3.2.12/lib/active_support/callbacks.rb:81:in `run_callbacks'
***> /usr/lib/ruby/gems/1.8/gems/actionpack-3.2.12/lib/action_dispatch/middleware/callbacks.rb:27:in `call'
***> /usr/lib/ruby/gems/1.8/gems/actionpack-3.2.12/lib/action_dispatch/middleware/remote_ip.rb:31:in `call'
***> /usr/lib/ruby/gems/1.8/gems/actionpack-3.2.12/lib/action_dispatch/middleware/debug_exceptions.rb:16:in `call'
***> /usr/lib/ruby/gems/1.8/gems/actionpack-3.2.12/lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'
***> /usr/lib/ruby/gems/1.8/gems/railties-3.2.12/lib/rails/rack/logger.rb:32:in `call_app'
***> /usr/lib/ruby/gems/1.8/gems/railties-3.2.12/lib/rails/rack/logger.rb:18:in `call'
***> /usr/lib/ruby/gems/1.8/gems/actionpack-3.2.12/lib/action_dispatch/middleware/request_id.rb:22:in `call'
***> /usr/lib/ruby/gems/1.8/gems/rack-1.4.5/lib/rack/methodoverride.rb:21:in `call'
***> /usr/lib/ruby/gems/1.8/gems/rack-1.4.5/lib/rack/runtime.rb:17:in `call'
***> /usr/lib/ruby/gems/1.8/gems/activesupport-3.2.12/lib/active_support/cache/strategy/local_cache.rb:72:in `call'
***> /usr/lib/ruby/gems/1.8/gems/rack-1.4.5/lib/rack/lock.rb:15:in `call'
***> /usr/lib/ruby/gems/1.8/gems/actionpack-3.2.12/lib/action_dispatch/middleware/static.rb:62:in `call'
***> /usr/lib/ruby/gems/1.8/gems/rack-cache-1.2/lib/rack/cache/context.rb:136:in `forward'
***> /usr/lib/ruby/gems/1.8/gems/rack-cache-1.2/lib/rack/cache/context.rb:143:in `pass'
***> /usr/lib/ruby/gems/1.8/gems/rack-cache-1.2/lib/rack/cache/context.rb:155:in `invalidate'
***> /usr/lib/ruby/gems/1.8/gems/rack-cache-1.2/lib/rack/cache/context.rb:71:in `call!'
***> /usr/lib/ruby/gems/1.8/gems/rack-cache-1.2/lib/rack/cache/context.rb:51:in `call'
***> /usr/lib/ruby/gems/1.8/gems/railties-3.2.12/lib/rails/engine.rb:479:in `call'
***> /usr/lib/ruby/gems/1.8/gems/railties-3.2.12/lib/rails/application.rb:223:in `call'
***> /usr/lib/ruby/gems/1.8/gems/railties-3.2.12/lib/rails/railtie/configurable.rb:30:in `send'
***> /usr/lib/ruby/gems/1.8/gems/railties-3.2.12/lib/rails/railtie/configurable.rb:30:in `method_missing'
***> /usr/lib/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/rack/request_handler.rb:96:in `process_request'
***> /usr/lib/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/abstract_request_handler.rb:516:in `accept_and_process_next_request'
***> /usr/lib/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/abstract_request_handler.rb:274:in `main_loop'
***> /usr/lib/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/rack/application_spawner.rb:206:in `start_request_handler'
***> /usr/lib/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/rack/application_spawner.rb:171:in `send'
***> /usr/lib/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/rack/application_spawner.rb:171:in `handle_spawn_application'
***> /usr/lib/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/utils.rb:470:in `safe_fork'
***> /usr/lib/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/rack/application_spawner.rb:166:in `handle_spawn_application'
***> /usr/lib/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/abstract_server.rb:357:in `__send__'
***> /usr/lib/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/abstract_server.rb:357:in `server_main_loop'
***> /usr/lib/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/abstract_server.rb:206:in `start_synchronously'
***> /usr/lib/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/abstract_server.rb:180:in `start'
***> /usr/lib/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/rack/application_spawner.rb:129:in `start'
***> /usr/lib/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/spawn_manager.rb:253:in `spawn_rack_application'
***> /usr/lib/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/abstract_server_collection.rb:132:in `lookup_or_add'
***> /usr/lib/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/spawn_manager.rb:246:in `spawn_rack_application'
***> /usr/lib/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/abstract_server_collection.rb:82:in `synchronize'
***> /usr/lib/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/abstract_server_collection.rb:79:in `synchronize'
***> /usr/lib/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/spawn_manager.rb:244:in `spawn_rack_application'
***> /usr/lib/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/spawn_manager.rb:137:in `spawn_application'
***> /usr/lib/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/spawn_manager.rb:275:in `handle_spawn_application'
***> /usr/lib/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/abstract_server.rb:357:in `__send__'
***> /usr/lib/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/abstract_server.rb:357:in `server_main_loop'
***> /usr/lib/ruby/gems/1.8/gems/passenger-3.0.19/lib/phusion_passenger/abstract_server.rb:206:in `start_synchronously'
***> /usr/lib/ruby/gems/1.8/gems/passenger-3.0.19/helper-scripts/passenger-spawn-server:99
***> [GitHosting] Cannot clone administrative repository. Requires human intervention !!!
***> No such file or directory - /tmp/redmine_git_hosting/gitolite3/gitolite-admin/keydir
***> /var/www/vhosts/ibento.cz/subdomains/redmine/plugins/redmine_git_hosting/lib/libs/git_hosting.rb:833:in `open'
***> /var/www/vhosts/ibento.cz/subdomains/redmine/plugins/redmine_git_hosting/lib/libs/git_hosting.rb:833:in `foreach'
***> /var/www/vhosts/ibento.cz/subdomains/redmine/plugins/redmine_git_hosting/lib/libs/git_hosting.rb:833:in `update_repositories'
***> /var/www/vhosts/ibento.cz/subdomains/redmine/plugins/redmine_git_hosting/app/models/git_hosting_observer.rb:32:in `set_update_active'
***> /var/www/vhosts/ibento.cz/subdomains/redmine/plugins/redmine_git_hosting/lib/redmine_git_hosting/patches/repositories_controller_patch.rb:73:in `create'
***> [GitHosting] update_repositories() failed
Completed 302 Found in 480ms (ActiveRecord: 10.4ms)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.