Sanitize auto-generated repo identifier; refs #4

Redmine repo identifiers can't have any characters except:
/[a-z0-9_-]/

We scan for this and turn everything else into a '-'
This commit is contained in:
Alex Dergachev 2014-12-03 22:50:37 +00:00
parent 3a7de96736
commit 81a6fe6b02

View File

@ -47,13 +47,13 @@ class Repository::GitRemote < Repository::Git
def initialize_clone def initialize_clone
# avoids crash in RepositoriesController#destroy # avoids crash in RepositoriesController#destroy
return unless attributes["extra_info"]["extra_clone_url"] return unless attributes["extra_info"]["extra_clone_url"]
p = parse(attributes["extra_info"]["extra_clone_url"]) p = parse(attributes["extra_info"]["extra_clone_url"])
self.identifier = p[:identifier] if identifier.empty? self.identifier = p[:identifier] if identifier.empty?
self.url = PATH_PREFIX + p[:path] if url.empty? self.url = PATH_PREFIX + p[:path] if url.empty?
err = ensure_possibly_empty_clone_exists err = ensure_possibly_empty_clone_exists
errors.add :extra_clone_url, err if err errors.add :extra_clone_url, err if err
end end
# equality check ignoring trailing whitespace and slashes # equality check ignoring trailing whitespace and slashes
@ -101,7 +101,7 @@ class Repository::GitRemote < Repository::Git
.gsub(/\.git$/, '') # Remove trailing .git .gsub(/\.git$/, '') # Remove trailing .git
ret[:host] = ret[:path].split('/').first ret[:host] = ret[:path].split('/').first
#TODO: handle project uniqueness automatically or prompt #TODO: handle project uniqueness automatically or prompt
ret[:identifier] = ret[:path].split('/').last.downcase ret[:identifier] = ret[:path].split('/').last.downcase.gsub(/[^a-z0-9_-]/,'-')
return ret return ret
end end
@ -118,7 +118,6 @@ class Repository::GitRemote < Repository::Git
end end
end end
# Checks if host is in ~/.ssh/known_hosts, adds it if not present # Checks if host is in ~/.ssh/known_hosts, adds it if not present
def self.add_known_host(host) def self.add_known_host(host)
# if not found... # if not found...
@ -138,5 +137,4 @@ class Repository::GitRemote < Repository::Git
end end
end end
end end
end end