Index: build.py |
=================================================================== |
--- a/build.py |
+++ b/build.py |
@@ -13,16 +13,18 @@ |
# GNU General Public License for more details. |
# |
# You should have received a copy of the GNU General Public License |
# along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
import os, sys, re, subprocess, buildtools |
from getopt import getopt, GetoptError |
+knownTypes = ('gecko', 'chrome') |
+ |
class Command(object): |
name = property(lambda self: self._name) |
shortDescription = property(lambda self: self._shortDescription, |
lambda self, value: self.__dict__.update({'_shortDescription': value})) |
description = property(lambda self: self._description, |
lambda self, value: self.__dict__.update({'_description': value})) |
params = property(lambda self: self._params, |
lambda self, value: self.__dict__.update({'_params': value})) |
@@ -106,28 +108,29 @@ def usage(scriptName, type, commandName= |
if commandName == None: |
global commandsList |
descriptions = [] |
for command in commandsList: |
if not command.isSupported(type): |
continue |
commandText = ('%s %s' % (command.name, command.params)).ljust(39) |
descriptionParts = splitByLength(command.shortDescription, 29) |
- descriptions.append(' %s %s %s' % (scriptName, commandText, descriptionParts[0])) |
+ descriptions.append(' %s [-t %s] %s %s' % (scriptName, type, commandText, descriptionParts[0])) |
for part in descriptionParts[1:]: |
- descriptions.append(' %s %s %s' % (' ' * len(scriptName), ' ' * len(commandText), part)) |
+ descriptions.append(' %s %s %s %s' % (' ' * len(scriptName), ' ' * len(type), ' ' * len(commandText), part)) |
print '''Usage: |
%(descriptions)s |
For details on a command run: |
- %(scriptName)s <command> --help |
+ %(scriptName)s [-t %(type)s] <command> --help |
''' % { |
'scriptName': scriptName, |
+ 'type': type, |
'descriptions': '\n'.join(descriptions) |
} |
else: |
global commands |
command = commands[commandName] |
description = '\n'.join(map(lambda s: '\n'.join(splitByLength(s, 80)), command.description.split('\n'))) |
options = [] |
for descr, short, long, value, types in command.options: |
@@ -144,24 +147,25 @@ For details on a command run: |
elif value == None: |
longText = '--%s' % long |
else: |
longText = '--%s=%s' % (long, value) |
descrParts = splitByLength(descr, 46) |
options.append(' %s %s %s' % (shortText.ljust(11), longText.ljust(19), descrParts[0])) |
for part in descrParts[1:]: |
options.append(' %s %s %s' % (' ' * 11, ' ' * 19, part)) |
- print '''%(scriptName)s %(name)s %(params)s |
+ print '''%(scriptName)s [-t %(type)s] %(name)s %(params)s |
%(description)s |
Options: |
%(options)s |
''' % { |
'scriptName': scriptName, |
+ 'type': type, |
'name': command.name, |
'params': command.params, |
'description': description, |
'options': '\n'.join(options) |
} |
def runBuild(baseDir, scriptName, opts, args, type): |
@@ -497,21 +501,59 @@ with addCommand(syncLocales, 'synclocale |
command.params = '<firefox_addon_directory>' |
command.supportedTypes = ('chrome') |
with addCommand(updatePSL, 'updatepsl') as command: |
command.shortDescription = 'Updates Public Suffix List' |
command.description = 'Downloads Public Suffix List (see http://publicsuffix.org/) and generates lib/publicSuffixList.js from it.' |
command.supportedTypes = ('chrome') |
-def processArgs(baseDir, args, type='gecko'): |
+def getType(baseDir, scriptName, args): |
+ # Look for an explicit type parameter (has to be the first parameter) |
+ if len(args) >= 2 and args[0] == '-t': |
Felix Dahlke
2013/01/25 08:30:49
Hard coding that -t needs to be the very first par
|
+ type = args[1] |
+ del args[1] |
+ del args[0] |
+ if type not in knownTypes: |
+ print ''' |
+Unknown type %s specified, supported types are: %s |
+''' % (type, ', '.join(knownTypes)) |
+ return None |
+ return type |
+ |
+ # Try to guess repository type |
+ types = [] |
+ for t in knownTypes: |
+ if os.path.exists(os.path.join(baseDir, 'metadata.%s' % t)): |
+ types.append(t) |
+ |
+ if len(types) == 1: |
+ return types[0] |
+ elif len(types) > 1: |
+ print ''' |
+Ambiguous repository type, please specify -t parameter explicitly, e.g. |
+%s -t %s build |
+''' % (scriptName, types[0]) |
+ return None |
+ else: |
+ print ''' |
+No metadata file found in this repository, a metadata file like |
+metadata.%s is required. |
+''' % knownTypes[0] |
+ return None |
+ |
+def processArgs(baseDir, args): |
global commands |
scriptName = os.path.basename(args[0]) |
args = args[1:] |
+ type = getType(baseDir, scriptName, args) |
Felix Dahlke
2013/01/25 08:30:49
There's a rogue white space before "args". Utter n
Wladimir Palant
2013/01/25 10:23:49
Fixed that before pushing.
|
+ if type == None: |
+ return |
+ |
if len(args) == 0: |
args = ['build'] |
print ''' |
No command given, assuming "build". For a list of commands run: |
%s help |
''' % scriptName |