/** * Helper service for returning information extracted from repository image metadata. */ angular.module('quay').factory('ImageMetadataService', ['UtilService', function(UtilService) { var metadataService = {}; metadataService.getFormattedCommand = function(image) { if (!image || !image.command || !image.command.length) { return ''; } var getCommandStr = function(command) { // Handle /bin/sh commands specially. if (command.length > 2 && command[0] == '/bin/sh' && command[1] == '-c') { return command[2]; } return command.join(' '); }; return getCommandStr(image.command); }; metadataService.getEscapedFormattedCommand = function(image) { return UtilService.textToSafeHtml(metadataService.getFormattedCommand(image)); }; metadataService.getImageCommand = function(image, imageId) { if (!image) { return null; } if (!image.__imageMap) { image.__imageMap = {}; image.__imageMap[image.id] = image; for (var i = 0; i < image.history.length; ++i) { var cimage = image.history[i]; image.__imageMap[cimage.id] = cimage; } } var found = image.__imageMap[imageId]; if (!found) { return null; } return metadataService.getDockerfileCommand(found.command); }; metadataService.getDockerfileCommand = function(command) { if (!command) { return ''; } command = command.join(' ').split(' '); // ["/bin/sh", "-c", "#(nop)", "RUN", "foo"] if (command[0] != '/bin/sh' || command[1] != '-c') { return ''; } var commandPrefix = '#(nop)'; if (command[2] != commandPrefix) { return 'RUN ' + command.slice(2).join(' '); } return command.slice(3).join(' '); }; return metadataService; }]);