provide a callback function to check the validation of OBS project name
authorDawei Yang <dawei.yang@intel.com>
Sun, 29 Jan 2012 17:08:52 +0000 (01:08 +0800)
committerDawei Yang <dawei.yang@intel.com>
Sun, 29 Jan 2012 17:08:52 +0000 (01:08 +0800)
tools/gbs

index 2adebb8b6e3b6dbf83aedf1acc97659a7fec4370..e7cce784071233ae481d37e012c883247791e722 100755 (executable)
--- a/tools/gbs
+++ b/tools/gbs
@@ -18,6 +18,7 @@
 
 import os
 import sys
+import re
 
 from gitbuildsys.__version__ import VERSION
 from gitbuildsys import msger, cmdln, errors, utils, runner
@@ -32,6 +33,18 @@ def handle_repository(option, opt_str, value, parser):
         setattr(parser.values, option.dest, [])
     getattr(parser.values, option.dest).append(value)
 
+def handle_project(option, opt_str, value, parser):
+    if not value:
+        raise errors.Usage("option %s: need value" % opt_str)
+    if value[0] == '-':
+        raise errors.Usage("option %s: invalid project name %s, can not " \
+                           "start with '-'" % (opt_str, value))
+    if not re.match(r'^(\w|:|\.|-)+$', value):
+        raise errors.Usage("option %s: invalid project name %s, only word " \
+                           "character, ':', '.' and '-' supportted" \
+                           % (opt_str, value))
+    setattr(parser.values, option.dest, value)
+
 class Gbs(cmdln.Cmdln):
     """
     Usage: gbs [GLOBAL-OPTS] SUBCOMMAND [OPTS] [ARGS...]
@@ -144,13 +157,19 @@ class Gbs(cmdln.Cmdln):
 
     @cmdln.alias('rb')
     @cmdln.option('-T', '--target-obsprj',
+                  action='callback',
                   default=None,
                   dest='target_obsprj',
+                  type='string',
+                  callback=handle_project,
                   help='OBS target project being used to build package, ' \
                        'use "home:<userid>:gbs:Trunk" if not specified')
     @cmdln.option('-B', '--base-obsprj',
+                  action='callback',
                   default=None,
                   dest='base_obsprj',
+                  type='string',
+                  callback=handle_project,
                   help='Base OBS project being used to branch from, ' \
                        'use "Trunk" if not specified')
     def do_remotebuild(self, subcmd, opts, *args):