def sync_versions(self, request, **kwargs): """ Sync the version data in the repo (on the build server) with what we have in the database. Returns the identifiers for the versions that have been deleted. """ project = get_object_or_404( Project.objects.api(self.request.user), pk=kwargs['pk']) # If the currently highest non-prerelease version is active, then make # the new latest version active as well. old_highest_version = determine_stable_version(project.versions.all()) if old_highest_version is not None: activate_new_stable = old_highest_version.active else: activate_new_stable = False try: # Update All Versions data = request.DATA added_versions = set() if 'tags' in data: ret_set = api_utils.sync_versions( project=project, versions=data['tags'], type='tag') added_versions.update(ret_set) if 'branches' in data: ret_set = api_utils.sync_versions( project=project, versions=data['branches'], type='branch') added_versions.update(ret_set) deleted_versions = api_utils.delete_versions(project, data) except Exception, e: log.exception("Sync Versions Error: %s" % e.message) return Response({'error': e.message}, status=status.HTTP_400_BAD_REQUEST)
def update_stable_version(self): """ Returns the version that was promoited to be the new stable version. It will return ``None`` if no update was mode or if there is no version on the project that can be considered stable. """ versions = self.versions.all() new_stable = determine_stable_version(versions) if new_stable: current_stable = self.get_stable_version() if current_stable: identifier_updated = new_stable.identifier != current_stable.identifier if identifier_updated and current_stable.machine: log.info( "Update stable version: {project}:{version}".format( project=self.slug, version=new_stable.identifier ) ) current_stable.identifier = new_stable.identifier current_stable.save() return new_stable else: log.info( "Creating new stable version: {project}:{version}".format( project=self.slug, version=new_stable.identifier ) ) current_stable = self.versions.create_stable(type=new_stable.type, identifier=new_stable.identifier) return new_stable
def update_stable_version(self): """ Returns the version that was promoited to be the new stable version. It will return ``None`` if no update was mode or if there is no version on the project that can be considered stable. """ versions = self.versions.all() new_stable = determine_stable_version(versions) if new_stable: current_stable = self.get_stable_version() if current_stable: identifier_updated = (new_stable.identifier != current_stable.identifier) if identifier_updated and current_stable.machine: log.info( "Update stable version: {project}:{version}".format( project=self.slug, version=new_stable.identifier)) current_stable.identifier = new_stable.identifier current_stable.save() return new_stable else: log.info( "Creating new stable version: {project}:{version}".format( project=self.slug, version=new_stable.identifier)) current_stable = self.versions.create_stable( type=new_stable.type, identifier=new_stable.identifier) return new_stable