def AsDict(self): d = { 'server': self.server, 'change': self.change, 'revision': self.revision, } try: d.update(commit_cache.Get(self.id_string)) d['created'] = d['created'].isoformat() except KeyError: patch_info = gerrit_service.GetChange( self.server, self.change, fields=('ALL_REVISIONS', 'DETAILED_ACCOUNTS', 'COMMIT_FOOTERS')) revision_info = patch_info['revisions'][self.revision] url = '%s/c/%s/+/%d/%d' % ( self.server, patch_info['project'], patch_info['_number'], revision_info['_number']) author = revision_info['uploader']['email'] created = datetime.datetime.strptime( revision_info['created'], '%Y-%m-%d %H:%M:%S.%f000') subject = patch_info['subject'] current_revision = patch_info['current_revision'] message = patch_info['revisions'][current_revision]['commit_with_footers'] d.update({ 'url': url, 'author': author, 'created': created.isoformat(), 'subject': subject, 'message': message, }) commit_cache.Put(self.id_string, url, author, created, subject, message) return d
def AsDict(self): d = { 'repository': self.repository, 'git_hash': self.git_hash, } try: d.update(commit_cache.Get(self.id_string)) d['created'] = d['created'].isoformat() except KeyError: commit_info = gitiles_service.CommitInfo(self.repository_url, self.git_hash) url = self.repository_url + '/+/' + commit_info['commit'] author = commit_info['author']['email'] created = ParseDateWithUTCOffset(commit_info['committer']['time']) subject = commit_info['message'].split('\n', 1)[0] message = commit_info['message'] d.update({ 'url': url, 'author': author, 'created': created.isoformat(), 'subject': subject, 'message': message, }) commit_cache.Put(self.id_string, url, author, created, subject, message) commit_position = _ParseCommitPosition(d['message']) if commit_position: d['commit_position'] = commit_position return d
def CacheCommitInfo(self, commit_info, memcache_timeout=None): url = self.repository_url + '/+/' + commit_info['commit'] author = commit_info['author']['email'] created = ParseDateWithUTCOffset(commit_info['committer']['time']) subject = commit_info['message'].split('\n', 1)[0] message = commit_info['message'] commit_cache.Put( self.id_string, url, author, created, subject, message, memcache_timeout=memcache_timeout) return { 'url': url, 'author': author, 'created': created, 'subject': subject, 'message': message, }
def testPutAndGet(self): created = datetime.datetime.now() commit_cache.Put('id string', 'https://example.url', '*****@*****.**', created, 'Subject.', 'Subject.\n\nMessage.') expected = { 'url': 'https://example.url', 'author': '*****@*****.**', 'created': created, 'subject': 'Subject.', 'message': 'Subject.\n\nMessage.', } self.assertEqual(commit_cache.Get('id string'), expected)
def CacheCommitInfo(self): try: return commit_cache.Get(self.id_string) except KeyError: commit_info = gitiles_service.CommitInfo( self.repository_url, self.git_hash) url = self.repository_url + '/+/' + commit_info['commit'] author = commit_info['author']['email'] created = ParseDateWithUTCOffset(commit_info['committer']['time']) subject = commit_info['message'].split('\n', 1)[0] message = commit_info['message'] commit_cache.Put(self.id_string, url, author, created, subject, message) return { 'url': url, 'author': author, 'created': created, 'subject': subject, 'message': message, }