+def external_overrides_copy(from_suite_name, to_suite_name, force = False):
+ session = DBConn().session()
+
+ from_suite = get_suite(from_suite_name, session)
+ to_suite = get_suite(to_suite_name, session)
+
+ if from_suite is None:
+ print "E: source %s not found." % from_suite_name
+ session.rollback()
+ return False
+ if to_suite is None:
+ print "E: target %s not found." % to_suite_name
+ session.rollback()
+ return False
+
+ if not force and to_suite.untouchable:
+ print "E: refusing to touch untouchable suite %s (not forced)." % to_suite_name
+ session.rollback()
+ return False
+
+ session.query(ExternalOverride).filter_by(suite=to_suite).delete()
+ session.execute("""
+ INSERT INTO external_overrides (suite, component, package, key, value)
+ SELECT :to_suite, component, package, key, value FROM external_overrides WHERE suite = :from_suite
+ """, { 'from_suite': from_suite.suite_id, 'to_suite': to_suite.suite_id })
+
+ session.commit()
+
+def external_overrides_import(suite_name, component_name, key, file, force = False):