-- Exclude everything that is already deprecated
AND
- builds.deprecated_by IS NULL
+ builds.deprecated_at IS NULL
""", self.id,
)
# Deprecate all builds
for build in builds:
- build.deprecate(self)
+ build.deprecate(build=self)
- def deprecate(self, build):
+ def deprecate(self, build=None, user=None):
"""
Called when a build needs to be deprecated
"""
- log.debug("Deprecating %s by %s" % (self, build))
+ if build:
+ log.debug("Deprecating %s by %s" % (self, build))
+ else:
+ log.debug("Deprecating %s" % self)
+
+ # Set user from build if not set
+ if user is None:
+ user = build.owner
# Mark as deprecated
- self.deprecated_by = build
+ self._set_attribute_now("deprecated_at")
+ if user:
+ self._set_attribute("deprecated_by", user)
+
+ # Store the build
+ if build:
+ self.deprecating_build = build
+
+ @property
+ def deprecated_at(self):
+ return self.data.deprecated_at
def is_deprecated(self):
- if self.data.deprecated_by:
+ if self.deprecated_at:
return True
return False
- def get_deprecated_by(self):
+ @lazy_property
+ def deprecated_by(self):
if self.data.deprecated_by:
- return self.backend.builds.get_by_id(self.data.deprecated_by)
+ return self.backend.users.get_by_id(self.data.deprecated_by)
+
+ def get_deprecating_build(self):
+ if self.data.deprecating_build_id:
+ return self.backend.builds.get_by_id(self.data.deprecating_build_id)
- def set_deprecated_by(self, build):
- self._set_attribute("deprecated_by", build)
+ def set_deprecating_build(self, build):
+ self._set_attribute("deprecating_build_id", build)
- deprecated_by = lazy_property(get_deprecated_by, set_deprecated_by)
+ deprecating_build = lazy_property(get_deprecating_build, set_deprecating_build)
@lazy_property
def deprecated_builds(self):
SELECT
'build-deprecated' AS type,
- deprecated_builds.created_at AS t,
+ builds.deprecated_at AS t,
4 AS priority,
builds.id AS build,
- builds.deprecated_by AS by_build,
+ builds.deprecating_build_id AS by_build,
NULL AS build_comment,
NULL AS user,
- builds.owner_id AS by_user
+ builds.deprecated_by AS by_user
FROM
builds
- LEFT JOIN
- builds deprecated_builds ON builds.deprecated_by = deprecated_builds.id
WHERE
builds.deleted_at IS NULL
AND
- deprecated_builds.deleted_at IS NULL
- AND
- builds.deprecated_by IS NOT NULL
+ builds.deprecated_at IS NOT NULL
UNION ALL
deleted_at timestamp without time zone,
deleted_by integer,
build_group_id integer,
+ deprecating_build_id integer,
+ deprecated_at timestamp without time zone,
deprecated_by integer
);
--
--- Name: builds_deprecated_by; Type: INDEX; Schema: public; Owner: -
+-- Name: builds_deprecating_build_id; Type: INDEX; Schema: public; Owner: -
--
-CREATE INDEX builds_deprecated_by ON public.builds USING btree (deprecated_by) WHERE (deleted_at IS NULL);
+CREATE INDEX builds_deprecating_build_id ON public.builds USING btree (deprecating_build_id) WHERE ((deleted_at IS NULL) AND (deprecated_at IS NOT NULL));
--
--
ALTER TABLE ONLY public.builds
- ADD CONSTRAINT builds_deprecated_by FOREIGN KEY (deprecated_by) REFERENCES public.builds(id);
+ ADD CONSTRAINT builds_deprecated_by FOREIGN KEY (deprecated_by) REFERENCES public.users(id);
+
+
+--
+-- Name: builds builds_deprecating_build_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.builds
+ ADD CONSTRAINT builds_deprecating_build_id FOREIGN KEY (deprecating_build_id) REFERENCES public.builds(id);
--