woodpecker/server/app/scripts/controllers/commit.js
Eichin David 50e368c24a refactoring commit controller
fixed bug where include of pr template raised angularjs error
2014-10-28 15:39:14 +01:00

95 lines
3.2 KiB
JavaScript

/*global angular, Drone, console */
angular.module('app').controller("CommitController", function ($scope, $http, $route, $routeParams, stdout, feed) {
'use strict';
var remote = $routeParams.remote,
owner = $routeParams.owner,
name = $routeParams.name,
branch = $routeParams.branch,
commit = $routeParams.commit,
// Create lineFormatter and outputElement since we need them anyway.
lineFormatter = new Drone.LineFormatter(),
outputElement = angular.element(document.querySelector('#output'));
var connectRemoteConsole = function (id) {
// Clear console output if connecting to new remote console (rebuild)
if (!outputElement.html() !== 0) {
outputElement.empty();
}
// Subscribe to stdout of the remote build
stdout.subscribe(id, function (out) {
// Append new output to console
outputElement.append(lineFormatter.format(out));
// Scroll if following
if ($scope.following) {
window.scrollTo(0, document.body.scrollHeight);
}
});
};
// Subscribe to feed so we can update gui if changes to the commit happen. (Build finished, Rebuild triggered, change from Pending to Started)
feed.subscribe(function (item) {
// If event is part of the active commit currently showing.
if (item.commit.sha === commit &&
item.commit.branch === branch) {
// If new status is Started, connect to remote console to get live output
if (item.commit.status === "Started") {
connectRemoteConsole(item.commit.id);
}
$scope.commit = item.commit;
$scope.$apply();
} else {
// we trigger an toast notification so the
// user is aware another build started
}
});
// Load the repo meta-data
$http({method: 'GET', url: '/api/repos/' + remote + '/' + owner + "/" + name}).
success(function (data, status, headers, config) {
$scope.repo = data;
}).
error(function (data, status, headers, config) {
console.log(data);
});
// Load the repo commit data
$http({method: 'GET', url: '/api/repos/' + remote + '/' + owner + "/" + name + "/branches/" + branch + "/commits/" + commit}).
success(function (data, status, headers, config) {
$scope.commit = data;
// If build has already finished, load console output from database
if (data.status !== 'Started' && data.status !== 'Pending') {
$http({method: 'GET', url: '/api/repos/' + remote + '/' + owner + "/" + name + "/branches/" + branch + "/commits/" + commit + "/console"}).
success(function (data, status, headers, config) {
outputElement.append(lineFormatter.format(data));
}).
error(function (data, status, headers, config) {
console.log(data);
});
return;
// If build is currently running, connect to remote console;
} else if (data.status === 'Started') {
connectRemoteConsole(data.id);
}
}).
error(function (data, status, headers, config) {
console.log(data);
});
$scope.following = false;
$scope.follow = function () {
$scope.following = true;
window.scrollTo(0, document.body.scrollHeight);
};
$scope.unfollow = function () {
$scope.following = false;
};
$scope.rebuildCommit = function () {
$http({method: 'POST', url: '/api/repos/' + remote + '/' + owner + '/' + name + '/branches/' + branch + '/commits/' + commit + '?action=rebuild' });
};
});