Commit 443e23e61a10f34e9eccc3b6e91803a0996f5050

Authored by Robert Speicher
1 parent f06d98e9

Add Repository#discover_default_branch and add it to PushObserver

app/roles/push_observer.rb
  1 +# Includes methods for handling Git Push events
  2 +#
  3 +# Triggered by PostReceive job
1 module PushObserver 4 module PushObserver
2 def observe_push(oldrev, newrev, ref, user) 5 def observe_push(oldrev, newrev, ref, user)
3 data = post_receive_data(oldrev, newrev, ref, user) 6 data = post_receive_data(oldrev, newrev, ref, user)
@@ -84,11 +87,10 @@ module PushObserver @@ -84,11 +87,10 @@ module PushObserver
84 data 87 data
85 end 88 end
86 89
87 -  
88 - # This method will be called after each post receive  
89 - # and only if user present in gitlab.  
90 - # All callbacks for post receive should be placed here 90 + # This method will be called after each post receive and only if the provided
  91 + # user is present in GitLab.
91 # 92 #
  93 + # All callbacks for post receive should be placed here.
92 def trigger_post_receive(oldrev, newrev, ref, user) 94 def trigger_post_receive(oldrev, newrev, ref, user)
93 # Create push event 95 # Create push event
94 self.observe_push(oldrev, newrev, ref, user) 96 self.observe_push(oldrev, newrev, ref, user)
@@ -101,5 +103,11 @@ module PushObserver @@ -101,5 +103,11 @@ module PushObserver
101 103
102 # Create satellite 104 # Create satellite
103 self.satellite.create unless self.satellite.exists? 105 self.satellite.create unless self.satellite.exists?
  106 +
  107 + # Discover the default branch, but only if it hasn't already been set to
  108 + # something else
  109 + if default_branch.nil?
  110 + update_attributes(default_branch: discover_default_branch)
  111 + end
104 end 112 end
105 end 113 end
app/roles/repository.rb
@@ -94,6 +94,24 @@ module Repository @@ -94,6 +94,24 @@ module Repository
94 end.sort_by(&:name) 94 end.sort_by(&:name)
95 end 95 end
96 96
  97 + # Discovers the default branch based on the repository's available branches
  98 + #
  99 + # - If no branches are present, returns nil
  100 + # - If one branch is present, returns its name
  101 + # - If two or more branches are present, returns the one that has a name
  102 + # matching root_ref (default_branch or 'master' if default_branch is nil)
  103 + def discover_default_branch
  104 + branches = heads.collect(&:name)
  105 +
  106 + if branches.length == 0
  107 + nil
  108 + elsif branches.length == 1
  109 + branches.first
  110 + else
  111 + branches.select { |v| v == root_ref }.first
  112 + end
  113 + end
  114 +
97 def has_commits? 115 def has_commits?
98 !!commit 116 !!commit
99 end 117 end
@@ -102,7 +120,7 @@ module Repository @@ -102,7 +120,7 @@ module Repository
102 default_branch || "master" 120 default_branch || "master"
103 end 121 end
104 122
105 - def root_ref? branch 123 + def root_ref?(branch)
106 root_ref == branch 124 root_ref == branch
107 end 125 end
108 126
@@ -111,7 +129,7 @@ module Repository @@ -111,7 +129,7 @@ module Repository
111 # Already packed repo archives stored at 129 # Already packed repo archives stored at
112 # app_root/tmp/repositories/project_name/project_name-commit-id.tag.gz 130 # app_root/tmp/repositories/project_name/project_name-commit-id.tag.gz
113 # 131 #
114 - def archive_repo ref 132 + def archive_repo(ref)
115 ref = ref || self.root_ref 133 ref = ref || self.root_ref
116 commit = self.commit(ref) 134 commit = self.commit(ref)
117 return nil unless commit 135 return nil unless commit
@@ -138,6 +156,6 @@ module Repository @@ -138,6 +156,6 @@ module Repository
138 end 156 end
139 157
140 def http_url_to_repo 158 def http_url_to_repo
141 - http_url = [Gitlab.config.url, "/", path, ".git"].join() 159 + http_url = [Gitlab.config.url, "/", path, ".git"].join('')
142 end 160 end
143 end 161 end