def fromId(db, review_id, branch=None, profiler=None): from dbutils import User cursor = db.cursor() cursor.execute( "SELECT type, branch, state, serial, summary, description, applyfilters, applyparentfilters FROM reviews WHERE id=%s", [review_id]) row = cursor.fetchone() if not row: raise NoSuchReview(review_id) type, branch_id, state, serial, summary, description, applyfilters, applyparentfilters = row if profiler: profiler.check("Review.fromId: basic") if branch is None: from dbutils import Branch branch = Branch.fromId(db, branch_id, load_review=False, profiler=profiler) cursor.execute("SELECT uid FROM reviewusers WHERE review=%s AND owner", (review_id, )) owners = User.fromIds(db, [user_id for (user_id, ) in cursor]) if profiler: profiler.check("Review.fromId: owners") review = Review(review_id, owners, type, branch, state, serial, summary, description, applyfilters, applyparentfilters) branch.review = review # Reviewers: all users that have at least one review file assigned to them. cursor.execute( """SELECT DISTINCT uid, assignee IS NOT NULL, type FROM reviewusers LEFT OUTER JOIN fullreviewuserfiles ON (fullreviewuserfiles.review=reviewusers.review AND assignee=uid) WHERE reviewusers.review=%s""", (review_id, )) reviewers = [] watchers = [] watcher_types = {} for user_id, is_reviewer, user_type in cursor.fetchall(): if is_reviewer: reviewers.append(user_id) elif user_id not in review.owners: watchers.append(user_id) watcher_types[user_id] = user_type review.reviewers = User.fromIds(db, reviewers) for watcher in User.fromIds(db, watchers): review.watchers[watcher] = watcher_types[watcher] if profiler: profiler.check("Review.fromId: users") return review
def fromId(db, review_id, branch=None, profiler=None): from dbutils import User cursor = db.cursor() cursor.execute("SELECT type, branch, state, serial, summary, description, applyfilters, applyparentfilters FROM reviews WHERE id=%s", [review_id]) row = cursor.fetchone() if not row: raise NoSuchReview(review_id) type, branch_id, state, serial, summary, description, applyfilters, applyparentfilters = row if profiler: profiler.check("Review.fromId: basic") if branch is None: from dbutils import Branch branch = Branch.fromId(db, branch_id, load_review=False, profiler=profiler) cursor.execute("SELECT uid FROM reviewusers WHERE review=%s AND owner", (review_id,)) owners = User.fromIds(db, [user_id for (user_id,) in cursor]) if profiler: profiler.check("Review.fromId: owners") review = Review(review_id, owners, type, branch, state, serial, summary, description, applyfilters, applyparentfilters) branch.review = review # Reviewers: all users that have at least one review file assigned to them. cursor.execute("""SELECT DISTINCT uid, assignee IS NOT NULL, type FROM reviewusers LEFT OUTER JOIN fullreviewuserfiles ON (fullreviewuserfiles.review=reviewusers.review AND assignee=uid) WHERE reviewusers.review=%s""", (review_id,)) reviewers = [] watchers = [] watcher_types = {} for user_id, is_reviewer, user_type in cursor.fetchall(): if is_reviewer: reviewers.append(user_id) elif user_id not in review.owners: watchers.append(user_id) watcher_types[user_id] = user_type review.reviewers = User.fromIds(db, reviewers) for watcher in User.fromIds(db, watchers): review.watchers[watcher] = watcher_types[watcher] if profiler: profiler.check("Review.fromId: users") return review
def __init__(self, db, review): import gitutils from dbutils import User self.__old_head_map = {} self.__new_head_map = {} cursor = db.cursor() cursor.execute("""SELECT old_head, new_head, old_upstream, new_upstream, uid FROM reviewrebases WHERE review=%s AND new_head IS NOT NULL""", (review.id,)) for old_head_id, new_head_id, old_upstream_id, new_upstream_id, user_id in cursor: old_head = gitutils.Commit.fromId(db, review.repository, old_head_id) new_head = gitutils.Commit.fromId(db, review.repository, new_head_id) if old_upstream_id is not None and new_upstream_id is not None: old_upstream = gitutils.Commit.fromId(db, review.repository, old_upstream_id) new_upstream = gitutils.Commit.fromId(db, review.repository, new_upstream_id) else: old_upstream = new_upstream = None user = User.fromId(db, user_id) rebase = ReviewRebase(review, old_head, new_head, old_upstream, new_upstream, user) self.append(rebase) self.__old_head_map[old_head] = rebase self.__new_head_map[new_head] = rebase
def getRecipients(self, db): from dbutils import User cursor = db.cursor() cursor.execute("SELECT uid, include FROM reviewrecipientfilters WHERE review=%s", (self.id,)) default_include = True included = set(owner.id for owner in self.owners) excluded = set() for uid, include in cursor: if uid is None: default_include = include elif include: included.add(uid) elif uid not in self.owners: excluded.add(uid) cursor.execute("SELECT uid FROM reviewusers WHERE review=%s", (self.id,)) recipients = [] for (user_id,) in cursor: if user_id in excluded: continue elif user_id not in included and not default_include: continue user = User.fromId(db, user_id) if user.status != "retired": recipients.append(user) return recipients
def getRecipients(self, db): from dbutils import User cursor = db.cursor() cursor.execute( "SELECT uid, include FROM reviewrecipientfilters WHERE review=%s", (self.id, )) default_include = True included = set(owner.id for owner in self.owners) excluded = set() for uid, include in cursor: if uid is None: default_include = include elif include: included.add(uid) elif uid not in self.owners: excluded.add(uid) cursor.execute("SELECT uid FROM reviewusers WHERE review=%s", (self.id, )) recipients = [] for (user_id, ) in cursor: if user_id in excluded: continue elif user_id not in included and not default_include: continue user = User.fromId(db, user_id) if user.status != "retired": recipients.append(user) return recipients
def __init__(self, db, review): import gitutils from dbutils import User self.__old_head_map = {} self.__new_head_map = {} cursor = db.cursor() cursor.execute("""SELECT old_head, new_head, old_upstream, new_upstream, uid FROM reviewrebases WHERE review=%s AND new_head IS NOT NULL""", (review.id,)) for old_head_id, new_head_id, old_upstream_id, new_upstream_id, user_id in cursor: old_head = gitutils.Commit.fromId(db, review.repository, old_head_id) new_head = gitutils.Commit.fromId(db, review.repository, new_head_id) if old_upstream_id is not None and new_upstream_id is not None: old_upstream = gitutils.Commit.fromId(db, review.repository, old_upstream_id) new_upstream = gitutils.Commit.fromId(db, review.repository, new_upstream_id) else: old_upstream = new_upstream = None user = User.fromId(db, user_id) rebase = ReviewRebase(review, old_head, new_head, old_upstream, new_upstream, user) self.append(rebase) self.__old_head_map[old_head] = rebase self.__new_head_map[new_head] = rebase if review.performed_rebase: self.__old_head_map[review.performed_rebase.old_head] = review.performed_rebase self.__new_head_map[review.performed_rebase.new_head] = review.performed_rebase
def __init__(self, db, review): import gitutils from dbutils import User self.__old_head_map = {} self.__new_head_map = {} cursor = db.cursor() cursor.execute("""SELECT old_head, new_head, old_upstream, new_upstream, uid, equivalent_merge, replayed_rebase FROM reviewrebases WHERE review=%s AND new_head IS NOT NULL""", (review.id,)) for (old_head_id, new_head_id, old_upstream_id, new_upstream_id, user_id, equivalent_merge_id, replayed_rebase_id) in cursor: old_head = gitutils.Commit.fromId(db, review.repository, old_head_id) new_head = gitutils.Commit.fromId(db, review.repository, new_head_id) if old_upstream_id is not None and new_upstream_id is not None: old_upstream = gitutils.Commit.fromId(db, review.repository, old_upstream_id) new_upstream = gitutils.Commit.fromId(db, review.repository, new_upstream_id) else: old_upstream = new_upstream = None if equivalent_merge_id: equivalent_merge = gitutils.Commit.fromId(db, review.repository, equivalent_merge_id) else: equivalent_merge = None if replayed_rebase_id: replayed_rebase = gitutils.Commit.fromId(db, review.repository, replayed_rebase_id) else: replayed_rebase = None user = User.fromId(db, user_id) rebase = ReviewRebase(review, old_head, new_head, old_upstream, new_upstream, user, equivalent_merge, replayed_rebase) self.append(rebase) self.__old_head_map[old_head] = rebase self.__new_head_map[new_head] = rebase if equivalent_merge: self.__old_head_map[equivalent_merge] = rebase if review.performed_rebase: self.__old_head_map[review.performed_rebase.old_head] = review.performed_rebase self.__new_head_map[review.performed_rebase.new_head] = review.performed_rebase