| |
@@ -14,7 +14,7 @@
|
| |
os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
|
| |
)
|
| |
|
| |
- from coprs import db, app
|
| |
+ from coprs import db, app, models
|
| |
from coprs.logic.coprs_logic import CoprDirsLogic
|
| |
from coprs.logic.builds_logic import BuildsLogic
|
| |
from coprs.logic.complex_logic import ComplexLogic
|
| |
@@ -74,12 +74,15 @@
|
| |
else:
|
| |
package = self.package
|
| |
|
| |
- build = BuildsLogic.rebuild_package(
|
| |
+ db.session.execute('LOCK TABLE build IN EXCLUSIVE MODE')
|
| |
+ if models.Build.query.filter(models.Build.scm_object_url == scm_object_url).first():
|
| |
+ log.info('\t -> Build for {} already exists.'.format(scm_object_url))
|
| |
+ return None
|
| |
+
|
| |
+ return BuildsLogic.rebuild_package(
|
| |
package, source_dict_update, copr_dir, update_callback,
|
| |
scm_object_type, scm_object_id, scm_object_url)
|
| |
|
| |
- return build
|
| |
-
|
| |
@classmethod
|
| |
def get_candidates_for_rebuild(cls, clone_url):
|
| |
if db.engine.url.drivername == 'sqlite':
|
| |
@@ -262,7 +265,7 @@
|
| |
and (not pkg.committish or event_info.branch_to.endswith(pkg.committish))
|
| |
and pkg.is_dir_in_commit(raw_commit_text)):
|
| |
|
| |
- log.info('\t -> rebuilding.')
|
| |
+ log.info('\t -> accepted.')
|
| |
|
| |
if event_info.object_type == 'pull-request':
|
| |
dirname = pkg.copr.name + ':pr:' + str(event_info.object_id)
|
| |
@@ -284,16 +287,22 @@
|
| |
'committish': event_info.end_commit,
|
| |
}
|
| |
|
| |
- build = pkg.build(
|
| |
- source_dict_update,
|
| |
- copr_dir,
|
| |
- update_callback,
|
| |
- event_info.object_type,
|
| |
- event_info.object_id,
|
| |
- scm_object_url
|
| |
- )
|
| |
- log.info('\t -> {}'.format(build.to_dict()))
|
| |
- db.session.commit()
|
| |
+ try:
|
| |
+ build = pkg.build(
|
| |
+ source_dict_update,
|
| |
+ copr_dir,
|
| |
+ update_callback,
|
| |
+ event_info.object_type,
|
| |
+ event_info.object_id,
|
| |
+ scm_object_url
|
| |
+ )
|
| |
+ if build:
|
| |
+ log.info('\t -> {}'.format(build.to_dict()))
|
| |
+ except Exception as e:
|
| |
+ log.error(str(e))
|
| |
+ db.session.rollback()
|
| |
+ else:
|
| |
+ db.session.commit()
|
| |
else:
|
| |
log.info('\t -> skipping.')
|
| |
|
| |
Fixes https://pagure.io/copr/copr/issue/369 by asking db if build with the same scm_url doesn't exist already.