Merge "Add dryrun flag to welcome_message.py"
diff --git a/jeepyb/cmd/notify_impact.py b/jeepyb/cmd/notify_impact.py
index 2214ffb..7038c8f 100644
--- a/jeepyb/cmd/notify_impact.py
+++ b/jeepyb/cmd/notify_impact.py
@@ -91,7 +91,7 @@
               'but I am in dry run mode' % subscriber)
 
 
-def create_bug(git_log, args, lp_project, subscribers):
+def create_bug(git_log, args, lp_project, config):
     """Create a bug for a change.
 
     Create a launchpad bug in lp_project, titled with the first line of
@@ -127,23 +127,22 @@
 
         # If the author of the merging patch matches our configured
         # subscriber lists, then subscribe the configured victims.
-        for email_address in subscribers.get('author_map', {}):
+        for email_address in config.get('author_map', {}):
             email_re = re.compile('^Author:.*%s.*' % email_address)
             for line in bug_descr.split('\n'):
                 m = email_re.match(line)
                 if m:
-                    author_class = subscribers['author_map'][email_address]
+                    author_class = config['author_map'][email_address]
 
         if author_class:
-            subscribers = \
-                subscribers.get('subscriber_map', {}).get(author_class, [])
-            for subscriber in subscribers:
+            config = config.get('subscriber_map', {}).get(author_class, [])
+            for subscriber in config:
                 actions.subscribe(buginfo, subscriber)
 
     return buglink
 
 
-def process_impact(git_log, args, subscribers):
+def process_impact(git_log, args, config):
     """Process DocImpact flag.
 
     If the 'DocImpact' flag is present for a change that is merged,
@@ -154,7 +153,7 @@
     """
     if args.impact.lower() == 'docimpact':
         if args.hook == "change-merged":
-            create_bug(git_log, args, 'openstack-manuals', subscribers)
+            create_bug(git_log, args, 'openstack-manuals', config)
         return
 
     email_content = EMAIL_TEMPLATE % (args.impact,
@@ -207,8 +206,8 @@
     parser.add_argument('--impact', default=None)
     parser.add_argument('--dest-address', default=None)
 
-    # Automatic subscribers
-    parser.add_argument('--auto-subscribers', type=argparse.FileType('r'),
+    # Automatic config
+    parser.add_argument('--config', type=argparse.FileType('r'),
                         default=None)
 
     # Don't actually create the bug
@@ -241,16 +240,16 @@
     # Where the entries in the author map are email addresses
     # to match in author lines, and the subscriber map is a
     # list of launchpad user ids.
-    subscribers = {}
-    if args.auto_subscribers:
-        subscribers = yaml.load(args.auto_subscribers.read())
+    config = {}
+    if args.config:
+        config = yaml.load(args.config.read())
 
     # Get git log
     git_log = extract_git_log(args)
 
     # Process impacts found in git log
     if impacted(git_log, args.impact):
-        process_impact(git_log, args, subscribers)
+        process_impact(git_log, args, config)
 
 if __name__ == "__main__":
     main()
diff --git a/jeepyb/cmd/update_bug.py b/jeepyb/cmd/update_bug.py
index f714e18..be24c46 100644
--- a/jeepyb/cmd/update_bug.py
+++ b/jeepyb/cmd/update_bug.py
@@ -316,11 +316,13 @@
     parser.add_argument('--project', default=None)
     parser.add_argument('--branch', default=None)
     parser.add_argument('--commit', default=None)
+    parser.add_argument('--topic', default=None)
     # change-merged
     parser.add_argument('--submitter', default=None)
     # patchset-created
     parser.add_argument('--uploader', default=None)
     parser.add_argument('--patchset', default=None)
+    parser.add_argument('--is-draft', default=None)
 
     args = parser.parse_args()
 
diff --git a/jeepyb/projects.py b/jeepyb/projects.py
index 6d15549..090a891 100644
--- a/jeepyb/projects.py
+++ b/jeepyb/projects.py
@@ -35,8 +35,7 @@
     try:
         return registry[project_full_name]['launchpad']
     except KeyError:
-        return _hardcoded_git2lp(project_full_name)
-        # return u.short_project_name(project_full_name)
+        return u.short_project_name(project_full_name)
 
 
 def _is_no_launchpad(project_full_name, obj_type):
@@ -116,61 +115,3 @@
         'stackforge/cookbook-openstack-orchestration',
         'stackforge/openstack-chef-repo',
     ]
-
-
-def _hardcoded_git2lp(project_full_name):
-    """Convert Git repo name to Launchpad project.
-
-    This function should be removed when projects.yaml will be updated.
-    To specify launchpad project name you just need add parameter 'lp' to your
-    project declaration in projects.yaml
-
-    Example:
-        - project: some/project
-          launchpad: awesomeproject
-          description: Best project ever.
-    """
-
-    project_map = {
-        'openstack/api-site': 'openstack-api-site',
-        'openstack/compute-api': 'openstack-api-site',
-        'openstack/database-api': 'openstack-api-site',
-        'openstack/django_openstack_auth': 'django-openstack-auth',
-        'openstack/identity-api': 'openstack-api-site',
-        'openstack/image-api': 'openstack-api-site',
-        'openstack/netconn-api': 'openstack-api-site',
-        'openstack/object-api': 'openstack-api-site',
-        'openstack/oslo-incubator': 'oslo',
-        'openstack/python-quantumclient': 'python-neutronclient',
-        'openstack/quantum': 'neutron',
-        'openstack/savanna': 'savanna',
-        'openstack/savanna-dashboard': 'savanna',
-        'openstack/savanna-extra': 'savanna',
-        'openstack/savanna-image-elements': 'savanna',
-        'openstack/tripleo-heat-templates': 'tripleo',
-        'openstack/tripleo-image-elements': 'tripleo',
-        'openstack/tripleo-incubator': 'tripleo',
-        'openstack/volume-api': 'openstack-api-site',
-        'stackforge/cookbook-openstack-block-storage': 'openstack-chef',
-        'stackforge/cookbook-openstack-common': 'openstack-chef',
-        'stackforge/cookbook-openstack-compute': 'openstack-chef',
-        'stackforge/cookbook-openstack-dashboard': 'openstack-chef',
-        'stackforge/cookbook-openstack-identity': 'openstack-chef',
-        'stackforge/cookbook-openstack-image': 'openstack-chef',
-        'stackforge/cookbook-openstack-metering': 'openstack-chef',
-        'stackforge/cookbook-openstack-network': 'openstack-chef',
-        'stackforge/cookbook-openstack-object-storage': 'openstack-chef',
-        'stackforge/cookbook-openstack-ops-database': 'openstack-chef',
-        'stackforge/cookbook-openstack-ops-messaging': 'openstack-chef',
-        'stackforge/cookbook-openstack-orchestration': 'openstack-chef',
-        'stackforge/fuel-astute': 'fuel',
-        'stackforge/fuel-main': 'fuel',
-        'stackforge/fuel-ostf': 'fuel',
-        'stackforge/fuel-web': 'fuel',
-        'stackforge/openstack-chef-repo': 'openstack-chef',
-        'stackforge/puppet-openstack_dev_env': 'puppet-openstack',
-        'stackforge/puppet-quantum': 'puppet-neutron',
-        'stackforge/puppet-savanna': 'savanna',
-    }
-    return project_map.get(project_full_name,
-                           u.short_project_name(project_full_name))