#1123 fix wrong old value in postBuildStateChange callback
Closed 5 years ago by mikem. Opened 5 years ago by julian8628.
julian8628/koji issue/1112  into  master

file modified
+30 -20
@@ -5276,7 +5276,8 @@ 

          #build_id was passed in - sanity check

          binfo = get_build(build_id, strict=True)

          st_complete = koji.BUILD_STATES['COMPLETE']

-         koji.plugin.run_callbacks('preBuildStateChange', attribute='state', old=binfo['state'], new=st_complete, info=binfo)

+         st_old = binfo['state']

+         koji.plugin.run_callbacks('preBuildStateChange', attribute='state', old=st_old, new=st_complete, info=binfo)

          for key in ('name', 'version', 'release', 'epoch', 'task_id'):

              if build[key] != binfo[key]:

                  raise koji.GenericError("Unable to complete build: %s mismatch (build: %s, rpm: %s)" % (key, binfo[key], build[key]))
@@ -5290,7 +5291,7 @@ 

          update.set(volume_id=build['volume_id'])

          update.execute()

          binfo = get_build(build_id, strict=True)

-         koji.plugin.run_callbacks('postBuildStateChange', attribute='state', old=binfo['state'], new=st_complete, info=binfo)

+         koji.plugin.run_callbacks('postBuildStateChange', attribute='state', old=st_old, new=st_complete, info=binfo)

  

      # now to handle the individual rpms

      for relpath in [srpm] + rpms:
@@ -7239,7 +7240,8 @@ 

      #               buildroot_archives KEEP (but should ideally be empty anyway)

      #   files on disk: DELETE

      st_deleted = koji.BUILD_STATES['DELETED']

-     koji.plugin.run_callbacks('preBuildStateChange', attribute='state', old=binfo['state'], new=st_deleted, info=binfo)

+     st_old = binfo['state']

+     koji.plugin.run_callbacks('preBuildStateChange', attribute='state', old=st_old, new=st_deleted, info=binfo)

      build_id = binfo['id']

      q = """SELECT id FROM rpminfo WHERE build_id=%(build_id)i"""

      rpm_ids = _fetchMulti(q, locals())
@@ -7256,7 +7258,7 @@ 

      if os.path.exists(builddir):

          koji.util.rmtree(builddir)

      binfo = get_build(build_id, strict=True)

-     koji.plugin.run_callbacks('postBuildStateChange', attribute='state', old=binfo['state'], new=st_deleted, info=binfo)

+     koji.plugin.run_callbacks('postBuildStateChange', attribute='state', old=st_old, new=st_deleted, info=binfo)

  

  def reset_build(build):

      """Reset a build so that it can be reimported
@@ -7275,7 +7277,8 @@ 

      if not binfo:

          #nothing to do

          return

-     koji.plugin.run_callbacks('preBuildStateChange', attribute='state', old=binfo['state'], new=koji.BUILD_STATES['CANCELED'], info=binfo)

+     st_old = binfo['state']

+     koji.plugin.run_callbacks('preBuildStateChange', attribute='state', old=st_old, new=koji.BUILD_STATES['CANCELED'], info=binfo)

      q = """SELECT id FROM rpminfo WHERE build_id=%(id)i"""

      ids = _fetchMulti(q, binfo)

      for (rpm_id,) in ids:
@@ -7324,7 +7327,7 @@ 

      if os.path.exists(builddir):

          koji.util.rmtree(builddir)

      binfo = get_build(build, strict=True)

-     koji.plugin.run_callbacks('postBuildStateChange', attribute='state', old=binfo['state'], new=koji.BUILD_STATES['CANCELED'], info=binfo)

+     koji.plugin.run_callbacks('postBuildStateChange', attribute='state', old=st_old, new=koji.BUILD_STATES['CANCELED'], info=binfo)

  

  def cancel_build(build_id, cancel_task=True):

      """Cancel a build
@@ -7343,7 +7346,8 @@ 

      build = get_build(build_id, strict=True)

      if build['state'] != st_building:

          return False

-     koji.plugin.run_callbacks('preBuildStateChange', attribute='state', old=build['state'], new=st_canceled, info=build)

+     st_old = build['state']

+     koji.plugin.run_callbacks('preBuildStateChange', attribute='state', old=st_old, new=st_canceled, info=build)

      update = """UPDATE build

      SET state = %(st_canceled)i, completion_time = NOW()

      WHERE id = %(build_id)i AND state = %(st_building)i"""
@@ -7357,7 +7361,7 @@ 

          if cancel_task:

              Task(task_id).cancelFull(strict=False)

      build = get_build(build_id, strict=True)

-     koji.plugin.run_callbacks('postBuildStateChange', attribute='state', old=build['state'], new=st_canceled, info=build)

+     koji.plugin.run_callbacks('postBuildStateChange', attribute='state', old=st_old, new=st_canceled, info=build)

      return True

  

  def _get_build_target(task_id):
@@ -10939,11 +10943,12 @@ 

          userinfo = get_user(user, strict=True)

          userid = userinfo['id']

          buildid = buildinfo['id']

-         koji.plugin.run_callbacks('preBuildStateChange', attribute='owner_id', old=buildinfo['owner_id'], new=userid, info=buildinfo)

+         owner_id_old = buildinfo['owner_id']

+         koji.plugin.run_callbacks('preBuildStateChange', attribute='owner_id', old=owner_id_old, new=userid, info=buildinfo)

          q = """UPDATE build SET owner=%(userid)i WHERE id=%(buildid)i"""

          _dml(q, locals())

          buildinfo = get_build(build, strict=True)

-         koji.plugin.run_callbacks('postBuildStateChange', attribute='owner_id', old=buildinfo['owner_id'], new=userid, info=buildinfo)

+         koji.plugin.run_callbacks('postBuildStateChange', attribute='owner_id', old=owner_id_old, new=userid, info=buildinfo)

  

      def setBuildTimestamp(self, build, ts):

          """Set the completion time for a build
@@ -10962,14 +10967,15 @@ 

                  raise koji.GenericError("Invalid time: %s" % ts)

          elif not isinstance(ts, NUMERIC_TYPES):

              raise koji.GenericError("Invalid type for timestamp")

-         koji.plugin.run_callbacks('preBuildStateChange', attribute='completion_ts', old=buildinfo['completion_ts'], new=ts, info=buildinfo)

+         ts_old = buildinfo['completion_ts']

+         koji.plugin.run_callbacks('preBuildStateChange', attribute='completion_ts', old=ts_old, new=ts, info=buildinfo)

          buildid = buildinfo['id']

          q = """UPDATE build

          SET completion_time=TIMESTAMP 'epoch' AT TIME ZONE 'utc' + '%(ts)f seconds'::interval

          WHERE id=%%(buildid)i""" % locals()

          _dml(q, locals())

          buildinfo = get_build(build, strict=True)

-         koji.plugin.run_callbacks('postBuildStateChange', attribute='completion_ts', old=buildinfo['completion_ts'], new=ts, info=buildinfo)

+         koji.plugin.run_callbacks('postBuildStateChange', attribute='completion_ts', old=ts_old, new=ts, info=buildinfo)

  

      def count(self, methodName, *args, **kw):

          """Execute the XML-RPC method with the given name and count the results.
@@ -12073,8 +12079,9 @@ 

          self.importImage(task_id, build_id, results)

          ensure_volume_symlink(build_info)

  

+         st_old = build_info['state']

          st_complete = koji.BUILD_STATES['COMPLETE']

-         koji.plugin.run_callbacks('preBuildStateChange', attribute='state', old=build_info['state'], new=st_complete, info=build_info)

+         koji.plugin.run_callbacks('preBuildStateChange', attribute='state', old=st_old, new=st_complete, info=build_info)

  

          update = UpdateProcessor('build', clauses=['id=%(build_id)i'],

                                   values={'build_id': build_id})
@@ -12084,7 +12091,7 @@ 

              update.set(volume_id=build_info['volume_id'])

          update.execute()

          build_info = get_build(build_id, strict=True)

-         koji.plugin.run_callbacks('postBuildStateChange', attribute='state', old=build_info['state'], new=st_complete, info=build_info)

+         koji.plugin.run_callbacks('postBuildStateChange', attribute='state', old=st_old, new=st_complete, info=build_info)

  

          # send email

          build_notification(task_id, build_id)
@@ -12200,7 +12207,8 @@ 

  

          # update build state

          st_complete = koji.BUILD_STATES['COMPLETE']

-         koji.plugin.run_callbacks('preBuildStateChange', attribute='state', old=build_info['state'], new=st_complete, info=build_info)

+         st_old = build_info['state']

+         koji.plugin.run_callbacks('preBuildStateChange', attribute='state', old=st_old, new=st_complete, info=build_info)

          update = UpdateProcessor('build', clauses=['id=%(build_id)i'],

                                   values={'build_id': build_id})

          update.set(state=st_complete)
@@ -12209,7 +12217,7 @@ 

          update.rawset(completion_time='now()')

          update.execute()

          build_info = get_build(build_id, strict=True)

-         koji.plugin.run_callbacks('postBuildStateChange', attribute='state', old=build_info['state'], new=st_complete, info=build_info)

+         koji.plugin.run_callbacks('postBuildStateChange', attribute='state', old=st_old, new=st_complete, info=build_info)

  

          # send email

          build_notification(task_id, build_id)
@@ -12343,8 +12351,9 @@ 

          ensure_volume_symlink(build_info)

  

          # update build state

+         st_old = build_info['state']

          st_complete = koji.BUILD_STATES['COMPLETE']

-         koji.plugin.run_callbacks('preBuildStateChange', attribute='state', old=build_info['state'], new=st_complete, info=build_info)

+         koji.plugin.run_callbacks('preBuildStateChange', attribute='state', old=st_old, new=st_complete, info=build_info)

          update = UpdateProcessor('build', clauses=['id=%(build_id)i'],

                                   values={'build_id': build_id})

          update.set(state=st_complete)
@@ -12353,7 +12362,7 @@ 

          update.rawset(completion_time='now()')

          update.execute()

          build_info = get_build(build_id, strict=True)

-         koji.plugin.run_callbacks('postBuildStateChange', attribute='state', old=build_info['state'], new=st_complete, info=build_info)

+         koji.plugin.run_callbacks('postBuildStateChange', attribute='state', old=st_old, new=st_complete, info=build_info)

  

          # send email

          build_notification(task_id, build_id)
@@ -12369,7 +12378,8 @@ 

  

          st_failed = koji.BUILD_STATES['FAILED']

          buildinfo = get_build(build_id, strict=True)

-         koji.plugin.run_callbacks('preBuildStateChange', attribute='state', old=buildinfo['state'], new=st_failed, info=buildinfo)

+         st_old = buildinfo['state']

+         koji.plugin.run_callbacks('preBuildStateChange', attribute='state', old=st_old, new=st_failed, info=buildinfo)

  

          query = """SELECT state, completion_time

          FROM build
@@ -12390,7 +12400,7 @@ 

          WHERE id = %(build_id)i"""

          _dml(update, locals())

          buildinfo = get_build(build_id, strict=True)

-         koji.plugin.run_callbacks('postBuildStateChange', attribute='state', old=buildinfo['state'], new=st_failed, info=buildinfo)

+         koji.plugin.run_callbacks('postBuildStateChange', attribute='state', old=st_old, new=st_failed, info=buildinfo)

          build_notification(task_id, build_id)

  

      def tagBuild(self, task_id, tag, build, force=False, fromtag=None):

The tested and old value in postBuildStateChange is fixed. Thanks.

This has been merged, but there is something wrong with the Pagure hook that closes prs and issues based on commit messages. I've filed a bug here:

https://pagure.io/pagure/issue/3905

I'm going to leave the state of this alone until I get some feedback from the Pagure devs.

Ok, I'm closing these manually.

Pull-Request has been closed by mikem

5 years ago