diff options
author | Robert Speicher <rspeicher@gmail.com> | 2012-09-05 09:01:20 +0400 |
---|---|---|
committer | Robert Speicher <rspeicher@gmail.com> | 2012-09-05 09:01:20 +0400 |
commit | 443e23e61a10f34e9eccc3b6e91803a0996f5050 (patch) | |
tree | df5f0aa302a9f24610b5ab76b8bbf69c3ce76d3c /app/roles | |
parent | f06d98e907f71dc9b3a4a2da0db1c096b6c07024 (diff) |
Add Repository#discover_default_branch and add it to PushObserver
Diffstat (limited to 'app/roles')
-rw-r--r-- | app/roles/push_observer.rb | 16 | ||||
-rw-r--r-- | app/roles/repository.rb | 24 |
2 files changed, 33 insertions, 7 deletions
diff --git a/app/roles/push_observer.rb b/app/roles/push_observer.rb index 1067404d5af..947ed42345d 100644 --- a/app/roles/push_observer.rb +++ b/app/roles/push_observer.rb @@ -1,3 +1,6 @@ +# Includes methods for handling Git Push events +# +# Triggered by PostReceive job module PushObserver def observe_push(oldrev, newrev, ref, user) data = post_receive_data(oldrev, newrev, ref, user) @@ -84,11 +87,10 @@ module PushObserver data end - - # This method will be called after each post receive - # and only if user present in gitlab. - # All callbacks for post receive should be placed here + # This method will be called after each post receive and only if the provided + # user is present in GitLab. # + # All callbacks for post receive should be placed here. def trigger_post_receive(oldrev, newrev, ref, user) # Create push event self.observe_push(oldrev, newrev, ref, user) @@ -101,5 +103,11 @@ module PushObserver # Create satellite self.satellite.create unless self.satellite.exists? + + # Discover the default branch, but only if it hasn't already been set to + # something else + if default_branch.nil? + update_attributes(default_branch: discover_default_branch) + end end end diff --git a/app/roles/repository.rb b/app/roles/repository.rb index 5f6c35414e1..a77de4ad5f0 100644 --- a/app/roles/repository.rb +++ b/app/roles/repository.rb @@ -94,6 +94,24 @@ module Repository end.sort_by(&:name) end + # Discovers the default branch based on the repository's available branches + # + # - If no branches are present, returns nil + # - If one branch is present, returns its name + # - If two or more branches are present, returns the one that has a name + # matching root_ref (default_branch or 'master' if default_branch is nil) + def discover_default_branch + branches = heads.collect(&:name) + + if branches.length == 0 + nil + elsif branches.length == 1 + branches.first + else + branches.select { |v| v == root_ref }.first + end + end + def has_commits? !!commit end @@ -102,7 +120,7 @@ module Repository default_branch || "master" end - def root_ref? branch + def root_ref?(branch) root_ref == branch end @@ -111,7 +129,7 @@ module Repository # Already packed repo archives stored at # app_root/tmp/repositories/project_name/project_name-commit-id.tag.gz # - def archive_repo ref + def archive_repo(ref) ref = ref || self.root_ref commit = self.commit(ref) return nil unless commit @@ -138,6 +156,6 @@ module Repository end def http_url_to_repo - http_url = [Gitlab.config.url, "/", path, ".git"].join() + http_url = [Gitlab.config.url, "/", path, ".git"].join('') end end |