Re: [gitorious] Bug Report: Repository names such as users, groups, committerships lead to Page Not Found errors

2011-07-11 Thread Marius Mårnes Mathiesen
Oscar,
Thanks for reporting this. Gitorious keeps a list of reserved names for
projects and repositories (lib/gitorious/reservations.rb) - the names you're
suggesting should be added there.

We have a bug tracker now at https://issues.gitorious.org/ - would you mind
reporting this bug there?

Cheers,
- Marius

On Sun, Jul 10, 2011 at 1:27 AM, oscar schneider wrote:

> Hi,
>
> I recently discoverd a problem with gitorious when I created a
> repository called "users".
>
> This leads to gitorious creating the repository but when this is
> completetd and I am redirected to repository's website I get this
> error:
>
> Sorry, page not found
> The page you were looking for does not exist. You may have mistyped,
> or the page could be moved.
>
> I encountered this on a private installation but the same happens at
> gitorious.org
>
> The same hold true for repository names such as "groups" and probably
> all table names in the gitorious DB. Only a repository "repositories"
> doesn't result in a "page not found" message, since
> https://gitorious/projectname/repositories is already a reserved route
> displaying all repos in that project. Nonetheless it is not possible
> to edit the repository.
>
> Possible mitigation: Check repository names before creating them and
> if they match any of the reserved words (table names, routes) and
> notify the user that he/she should choose a different name for the
> repository. Maybe projects are also affected, but I do not want to try
> to create a project with a title like "users" because it already took
> me quite some time to figure out how to clean up after creating only a
> repository with that name.
>
> It is not possible to delete such repositories through the web
> interface (well, besides deleting the entire project, which might not
> be an option sometimes).
>
> I am not a huge rails pro in any way but I managed to delete the
> repository via the rails console, but this is where my trouble
> started, because then my dashboard could not be viewed since "users"
> was in my favorites list, thus one of my favorites was now nil.
> Therefore I got this error via mail:
>
> A ActionView::TemplateError occurred in site#index:
>
>  undefined method `user' for nil:NilClass
>  On line #131 of app/views/site/dashboard.html.erb
>
>128:   
>129:   
>130: <% @favorites.each do |favorite| %>
>131:   
>132: <%= link_to_watchable(favorite) -%>
>133:   
>134: <% end %>
>
> I managed to solve this by deleting the repo from my favorites list.
> However it was also necessary to remove other references to that
> repository. In my case, the repository was owned by a group/team, thus
> trying to open the homepage of that team also resulted in a Page Not
> Found. This results in an error like this:
>
> A NoMethodError occurred in groups#show:
>
>  undefined method `project_id' for nil:NilClass
>  [RAILS_ROOT]/app/models/group.rb:85:in `all_related_project_ids'
>
> Here is a short howto for getting rid of the "evil" repository:
>
> 1. Login to your gitorious instance
> 2. Switch user to the one owning gitorious, in my case git: sudo su
> git
> 3. Switch to the directory where the gitorious code is: git@gitorious:
> cd ~/gitorious/current
> 4. Start the rails console: RAILS_ENV=production /usr/local/bin/
> gitorious_ruby script/console
> 5. evil = Repository.find_by_name "users" (note the repository id for
> evil, you might need it later)
> 6. evil.delete
> 7. a = event.last
> 8. a.delete
> 9. g = Group.find_by_name "groupname"
> 10. If the evil repository is the newest for that group:
> g.committerships = g.committerships - [g.committerships[-1]]
> 11. g.repository_ids = g.repository_ids - [ (repo id of evil
> repository) ]
> 12. g.save
> 13. p = Project.find_by_title "affected_proj"
> 14. p.repository_ids = g.repository_ids - [ (repo id of evil
> repository) ]
> 15. p.save
>
> This should be it.
>
> --
> To post to this group, send email to gitorious@googlegroups.com
> To unsubscribe from this group, send email to
> gitorious+unsubscr...@googlegroups.com
>



-- 
Marius Mårnes Mathiesen
Rubyist, Shortcut AS
Tel.: (+47) 92 60 95 38.

http://shortcut.no

-- 
To post to this group, send email to gitorious@googlegroups.com
To unsubscribe from this group, send email to
gitorious+unsubscr...@googlegroups.com


[gitorious] Bug Report: Repository names such as users, groups, committerships lead to Page Not Found errors

2011-07-10 Thread oscar schneider
Hi,

I recently discoverd a problem with gitorious when I created a
repository called "users".

This leads to gitorious creating the repository but when this is
completetd and I am redirected to repository's website I get this
error:

Sorry, page not found
The page you were looking for does not exist. You may have mistyped,
or the page could be moved.

I encountered this on a private installation but the same happens at
gitorious.org

The same hold true for repository names such as "groups" and probably
all table names in the gitorious DB. Only a repository "repositories"
doesn't result in a "page not found" message, since
https://gitorious/projectname/repositories is already a reserved route
displaying all repos in that project. Nonetheless it is not possible
to edit the repository.

Possible mitigation: Check repository names before creating them and
if they match any of the reserved words (table names, routes) and
notify the user that he/she should choose a different name for the
repository. Maybe projects are also affected, but I do not want to try
to create a project with a title like "users" because it already took
me quite some time to figure out how to clean up after creating only a
repository with that name.

It is not possible to delete such repositories through the web
interface (well, besides deleting the entire project, which might not
be an option sometimes).

I am not a huge rails pro in any way but I managed to delete the
repository via the rails console, but this is where my trouble
started, because then my dashboard could not be viewed since "users"
was in my favorites list, thus one of my favorites was now nil.
Therefore I got this error via mail:

A ActionView::TemplateError occurred in site#index:

  undefined method `user' for nil:NilClass
  On line #131 of app/views/site/dashboard.html.erb

128:   
129:   
130: <% @favorites.each do |favorite| %>
131:   
132: <%= link_to_watchable(favorite) -%>
133:   
134: <% end %>

I managed to solve this by deleting the repo from my favorites list.
However it was also necessary to remove other references to that
repository. In my case, the repository was owned by a group/team, thus
trying to open the homepage of that team also resulted in a Page Not
Found. This results in an error like this:

A NoMethodError occurred in groups#show:

  undefined method `project_id' for nil:NilClass
  [RAILS_ROOT]/app/models/group.rb:85:in `all_related_project_ids'

Here is a short howto for getting rid of the "evil" repository:

1. Login to your gitorious instance
2. Switch user to the one owning gitorious, in my case git: sudo su
git
3. Switch to the directory where the gitorious code is: git@gitorious:
cd ~/gitorious/current
4. Start the rails console: RAILS_ENV=production /usr/local/bin/
gitorious_ruby script/console
5. evil = Repository.find_by_name "users" (note the repository id for
evil, you might need it later)
6. evil.delete
7. a = event.last
8. a.delete
9. g = Group.find_by_name "groupname"
10. If the evil repository is the newest for that group:
g.committerships = g.committerships - [g.committerships[-1]]
11. g.repository_ids = g.repository_ids - [ (repo id of evil
repository) ]
12. g.save
13. p = Project.find_by_title "affected_proj"
14. p.repository_ids = g.repository_ids - [ (repo id of evil
repository) ]
15. p.save

This should be it.

-- 
To post to this group, send email to gitorious@googlegroups.com
To unsubscribe from this group, send email to
gitorious+unsubscr...@googlegroups.com