From 55d846061e79eba1448f0e6d72ebcb0a40cc25e0 Mon Sep 17 00:00:00 2001 From: Joseph Schorr Date: Fri, 14 Feb 2014 18:37:06 -0500 Subject: [PATCH] Add ability to re-run a dockerfile build --- data/model.py | 10 ++++++++++ endpoints/api.py | 9 +++++++++ static/js/controllers.js | 23 ++++++++++++++++++++++- static/partials/repo-build.html | 27 ++++++++++++++++++++++++++- 4 files changed, 67 insertions(+), 2 deletions(-) diff --git a/data/model.py b/data/model.py index f6dd75965..d137ab2e5 100644 --- a/data/model.py +++ b/data/model.py @@ -763,6 +763,16 @@ def get_all_repo_users(namespace_name, repository_name): Repository.name == repository_name) +def get_repository_for_resource(resource_key): + joined = Repository.select().join(RepositoryBuild) + query = joined.where(RepositoryBuild.resource_key == resource_key).limit(1) + result = list(query) + if not result: + return None + + return result[0] + + def get_repository(namespace_name, repository_name): try: return Repository.get(Repository.name == repository_name, diff --git a/endpoints/api.py b/endpoints/api.py index 4372c9774..472064dc2 100644 --- a/endpoints/api.py +++ b/endpoints/api.py @@ -1157,6 +1157,7 @@ def build_status_view(build_obj): 'started': build_obj.started, 'display_name': build_obj.display_name, 'status': status, + 'resource_key': build_obj.resource_key } @@ -1221,6 +1222,14 @@ def request_repo_build(namespace, repository): logger.debug('User requested repository initialization.') dockerfile_id = request.get_json()['file_id'] + # Check if the dockerfile resource has already been used. If so, then it can only be reused if the + # user has access to the repository for which it was used. + associated_repository = model.get_repository_for_resource(dockerfile_id) + if associated_repository: + if not ModifyRepositoryPermission(associated_repository.namespace, associated_repository.name): + abort(403) + + # Start the build. repo = model.get_repository(namespace, repository) token = model.create_access_token(repo, 'write') display_name = user_files.get_file_checksum(dockerfile_id) diff --git a/static/js/controllers.js b/static/js/controllers.js index ea6c64ba8..b9bd66bfc 100644 --- a/static/js/controllers.js +++ b/static/js/controllers.js @@ -785,7 +785,28 @@ function RepoBuildCtrl($scope, Restangular, ApiService, $routeParams, $rootScope $scope.polling = false; $scope.adjustLogHeight = function() { - $('.build-logs').height($(window).height() - 365); + $('.build-logs').height($(window).height() - 385); + }; + + $scope.askRestartBuild = function(build) { + $('#confirmRestartBuildModal').modal({}); + }; + + $scope.restartBuild = function(build) { + $('#confirmRestartBuildModal').modal('hide'); + + var data = { + 'file_id': build['resource_key'] + }; + + var params = { + 'repository': namespace + '/' + name + }; + + ApiService.requestRepoBuild(data, params).then(function(newBuild) { + $scope.builds.push(newBuild); + $scope.setCurrentBuild(newBuild['id'], true); + }); }; $scope.hasLogs = function(container) { diff --git a/static/partials/repo-build.html b/static/partials/repo-build.html index 9237440be..8f04b8619 100644 --- a/static/partials/repo-build.html +++ b/static/partials/repo-build.html @@ -72,12 +72,37 @@ -
+
+ {{ build.id }}
+ + + +