Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add weight calculations for repo scheduling in repo collection #2316

Merged
merged 51 commits into from
Apr 18, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
5b13861
RedisScalar class
IsaacMilarky Mar 17, 2023
1fd6ffb
libyear fix
IsaacMilarky Mar 24, 2023
2b4ea45
Merge branch 'dev' into collection-hooks-with-weight
IsaacMilarky Mar 24, 2023
77dc04d
Implement redhat weight changes
IsaacMilarky Mar 24, 2023
b103acb
subtract weights
IsaacMilarky Mar 24, 2023
83417bd
dumb python type cast
IsaacMilarky Mar 24, 2023
4222d60
fix no return and more clear logging
IsaacMilarky Mar 24, 2023
0614f72
merge with dev
IsaacMilarky Apr 4, 2023
2f47a02
Scrap hard limit idea
IsaacMilarky Apr 10, 2023
a952d55
add weights to collection_status
IsaacMilarky Apr 10, 2023
85212cf
add columns for collection status in alembic
IsaacMilarky Apr 10, 2023
b4b0cea
Update
IsaacMilarky Apr 10, 2023
6b630e0
merge with dev
IsaacMilarky Apr 11, 2023
45326c8
print
IsaacMilarky Apr 11, 2023
c49471e
vscode
IsaacMilarky Apr 11, 2023
74d79f2
fix schema
IsaacMilarky Apr 11, 2023
638925d
fill in weight
IsaacMilarky Apr 11, 2023
61f41fd
Complete sort logic for collection weight
IsaacMilarky Apr 11, 2023
25e3ac8
syntax
IsaacMilarky Apr 11, 2023
fc18923
make sure that commit weight is updated
IsaacMilarky Apr 11, 2023
b66f2c4
core repo update weight logic
IsaacMilarky Apr 11, 2023
eb4c544
try to get celery chord working
IsaacMilarky Apr 11, 2023
4477429
syntax
IsaacMilarky Apr 11, 2023
deb7c8e
syntax
IsaacMilarky Apr 11, 2023
ecdffa2
apply date factor for core repo weight
IsaacMilarky Apr 11, 2023
f6afabb
add time_factor calculation to facade weight logic
IsaacMilarky Apr 11, 2023
b894bc2
repo added is a value that doesn't get updated when it gets introduce…
IsaacMilarky Apr 11, 2023
2172aaa
deal with if the record doesn't have collection yet
IsaacMilarky Apr 11, 2023
7b6e953
Merge branch 'dev' into collection-hooks-with-weight
IsaacMilarky Apr 12, 2023
8b64cff
add periodic task to update repo weights on midnight during even numb…
IsaacMilarky Apr 12, 2023
a75ab1c
add command to reset repo age
IsaacMilarky Apr 12, 2023
e9cc16f
Un-needed import
IsaacMilarky Apr 12, 2023
c5bd0f4
replace sql with orm query
IsaacMilarky Apr 12, 2023
e358c43
adjust date weight
IsaacMilarky Apr 13, 2023
35201af
change update weight to not schedule per repo
IsaacMilarky Apr 13, 2023
0357be3
Add offset for 30 day collection restriction
IsaacMilarky Apr 14, 2023
209ad2a
prelim tweaks from meeting with Andrew
IsaacMilarky Apr 14, 2023
0f5d669
Merge branch 'dev' into collection-hooks-with-weight
IsaacMilarky Apr 17, 2023
820e1aa
schema changes following meeting with Andrew Brain
IsaacMilarky Apr 18, 2023
5d94dd3
downgrade logic in alembic
IsaacMilarky Apr 18, 2023
bfbe438
update weight logic
IsaacMilarky Apr 18, 2023
3164692
fix update logic
IsaacMilarky Apr 18, 2023
18acf48
make secondary weight differant
IsaacMilarky Apr 18, 2023
4ebc2c8
implement new/old repo hierarchy as discussed
IsaacMilarky Apr 18, 2023
e01c1d6
move reset-repo-age to augur db
IsaacMilarky Apr 18, 2023
dccb7c1
move reset-repo-age to augur db
IsaacMilarky Apr 18, 2023
01919fd
stop alembic from adding repos to collection_status
IsaacMilarky Apr 18, 2023
d44c894
typo
IsaacMilarky Apr 18, 2023
9102ce9
use default repo_added
IsaacMilarky Apr 18, 2023
241ae72
limit check before old repo schedule
IsaacMilarky Apr 18, 2023
c02068f
alembic changes
IsaacMilarky Apr 18, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
11 changes: 7 additions & 4 deletions augur/application/cli/backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,7 @@
import uuid
import traceback
from urllib.parse import urlparse
from sqlalchemy import update

from datetime import datetime

from augur import instance_id
from augur.tasks.start_tasks import augur_collection_monitor, CollectionState
Expand Down Expand Up @@ -187,13 +186,15 @@ def augur_stop(signal, logger):
"""

augur_processes = get_augur_processes()
_broadcast_signal_to_processes(augur_processes, broadcast_signal=signal, given_logger=logger)

# if celery is running, run the cleanup function
process_names = [process.name() for process in augur_processes]

_broadcast_signal_to_processes(augur_processes, broadcast_signal=signal, given_logger=logger)

if "celery" in process_names:
IsaacMilarky marked this conversation as resolved.
Show resolved Hide resolved
cleanup_after_collection_halt(logger)


def cleanup_after_collection_halt(logger):
clear_redis_caches()
connection_string = ""
Expand Down Expand Up @@ -441,6 +442,8 @@ def order_repos(repos):

return repo_git_urls



# def initialize_components(augur_app, disable_housekeeper):
# master = None
# manager = None
Expand Down
2 changes: 0 additions & 2 deletions augur/application/cli/collection.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,6 @@

logger = AugurLogger("augur", reset_logfiles=True).get_logger()

def get_page_count()


def check_collection(owner, repo, key_manager, session):

Expand Down
20 changes: 19 additions & 1 deletion augur/application/cli/db.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@
from augur.application.db.session import DatabaseSession
from augur.application.logs import AugurLogger
from augur.application.db.engine import DatabaseEngine
from sqlalchemy import update
from datetime import datetime
from augur.application.db.models import Repo

logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -373,7 +376,6 @@ def init_database(
def test_db_connection():
pass


# TODO: Fix this function
def run_psql_command_in_database(target_type, target):
if target_type not in ["-f", "-c"]:
Expand Down Expand Up @@ -456,3 +458,19 @@ def check_pgpass_credentials(config):
pgpass_file.write(credentials_string + "\n")
else:
print("Credentials found in $HOME/.pgpass")


#NOTE: For some reason when I try to add function decorators to this function
#click thinks it's an argument and tries to parse it but it errors since a function
#isn't an iterable.
@cli.command("reset-repo-age")
def reset_repo_age():

with DatabaseSession(logger) as session:
update_query = (
update(Repo)
.values(repo_added=datetime.now())
)

session.execute(update_query)
session.commit()
38 changes: 37 additions & 1 deletion augur/application/db/models/augur_operations.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,15 @@

import logging
import secrets
import traceback
import importlib

from augur.application.db.models import Repo, RepoGroup
from augur.application.db.session import DatabaseSession
from augur.application.db.models.base import Base



FRONTEND_REPO_GROUP_NAME = "Frontend Repos"
logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -1009,14 +1011,48 @@ class CollectionStatus(Base):
facade_status = Column(String,nullable=False, server_default=text("'Pending'"))
facade_data_last_collected = Column(TIMESTAMP)
facade_task_id = Column(String)

core_weight = Column(BigInteger)
facade_weight = Column(BigInteger)
secondary_weight = Column(BigInteger)

issue_pr_sum = Column(BigInteger)
commit_sum = Column(BigInteger)

repo = relationship("Repo", back_populates="collection_status")

@staticmethod
def insert(session, repo_id):
from augur.tasks.github.util.util import get_repo_weight_by_issue
from augur.tasks.util.worker_util import calculate_date_weight_from_timestamps

repo = Repo.get_by_id(session, repo_id)
repo_git = repo.repo_git

IsaacMilarky marked this conversation as resolved.
Show resolved Hide resolved
collection_status_unique = ["repo_id"]
result = session.insert_data({"repo_id": repo_id}, CollectionStatus, collection_status_unique, on_conflict_update=False)

try:
pr_issue_count = get_repo_weight_by_issue(session.logger, repo_git)
#session.logger.info(f"date weight: {calculate_date_weight_from_timestamps(repo.repo_added, None)}")
github_weight = pr_issue_count - calculate_date_weight_from_timestamps(repo.repo_added, None)
except Exception as e:
pr_issue_count = None
github_weight = None
session.logger.error(
''.join(traceback.format_exception(None, e, e.__traceback__)))
IsaacMilarky marked this conversation as resolved.
Show resolved Hide resolved


record = {
"repo_id": repo_id,
"issue_pr_sum": pr_issue_count,
"core_weight": github_weight,
"secondary_weight": github_weight
}

result = session.insert_data(record, CollectionStatus, collection_status_unique, on_conflict_update=False)

session.logger.info(f"Trying to insert repo \n issue and pr sum: {record['issue_pr_sum']}")

if not result:
return False

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
"""Add weight data to collection status to determine collection order of repos

Revision ID: 16
Revises: 15
Create Date: 2023-04-10 18:28:12.460522

"""
from alembic import op
import sqlalchemy as sa


# revision identifiers, used by Alembic.
revision = '16'
down_revision = '15'
branch_labels = None
depends_on = None


def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.add_column('collection_status', sa.Column('core_weight', sa.BigInteger()), schema='augur_operations')
op.add_column('collection_status', sa.Column('facade_weight', sa.BigInteger()), schema='augur_operations')
op.add_column('collection_status', sa.Column('secondary_weight', sa.BigInteger()), schema='augur_operations')

op.add_column('collection_status', sa.Column('issue_pr_sum', sa.BigInteger()), schema='augur_operations')
op.add_column('collection_status', sa.Column('commit_sum', sa.BigInteger()), schema='augur_operations')
# ### end Alembic commands ###


def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_column('collection_status', 'facade_weight', schema='augur_operations')
op.drop_column('collection_status', 'core_weight', schema='augur_operations')
op.drop_column('collection_status', 'secondary_weight', schema='augur_operations')

op.drop_column('collection_status', 'issue_pr_sum', schema='augur_operations')
op.drop_column('collection_status', 'commit_sum', schema='augur_operations')
# ### end Alembic commands ###
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,7 @@ def upgrade():

# add collection status for any existing repos
conn = op.get_bind()
repos = conn.execute(text("""SELECT repo_id from repo""")).fetchall()

for repo in repos:
repo_id = repo[0]
conn.execute(text(f"""INSERT INTO "augur_operations"."collection_status" ("repo_id") VALUES ({repo_id});"""))


conn.execute(text("""
UPDATE augur_operations.config
SET value = '600'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1072,13 +1072,13 @@ INSERT INTO "augur_data"."contributor_affiliations"("ca_id", "ca_domain", "tool_

INSERT INTO "augur_data"."repo_groups"("repo_group_id", "rg_name", "rg_description", "rg_website", "rg_recache", "rg_last_modified", "rg_type", "tool_source", "tool_version", "data_source", "data_collection_date") VALUES (10, 'Default Repo Group', 'The default repo group created by the schema generation script', '', 0, '2021-06-03 15:55:20', 'GitHub Organization', 'load', 'one', 'git', '2019-06-05 13:36:25');

INSERT INTO "augur_data"."repo" ("repo_id", "repo_group_id", "repo_git", "repo_path", "repo_name", "repo_added", "repo_status", "repo_type", "url", "owner_id", "description", "primary_language", "created_at", "forked_from", "updated_at", "tool_source", "tool_version", "data_source", "data_collection_date", "repo_archived", "repo_archived_date_collected") VALUES (25452, 10, 'https://github.com/chaoss/whitepaper', 'github.com/chaoss/', 'whitepaper', '2021-04-17 21:40:42', 'Complete', '', NULL, NULL, NULL, NULL, NULL, 'Parent not available', NULL, 'CLI', '1.0', 'Git', '2021-04-17 21:40:42', 0, NULL);
INSERT INTO "augur_data"."repo" ("repo_id", "repo_group_id", "repo_git", "repo_path", "repo_name", "repo_added", "repo_status", "repo_type", "url", "owner_id", "description", "primary_language", "created_at", "forked_from", "updated_at", "tool_source", "tool_version", "data_source", "data_collection_date", "repo_archived", "repo_archived_date_collected") VALUES (24441, 10, 'https://github.com/operate-first/operate-first-twitter', 'github.com/operate-first/', 'operate-first-twitter', '2021-08-25 16:47:47', 'Complete', '', NULL, NULL, NULL, NULL, NULL, 'Parent not available', NULL, 'CLI', '1.0', 'Git', '2021-08-25 16:47:47', 0, NULL);
INSERT INTO "augur_data"."repo" ("repo_id", "repo_group_id", "repo_git", "repo_path", "repo_name", "repo_added", "repo_status", "repo_type", "url", "owner_id", "description", "primary_language", "created_at", "forked_from", "updated_at", "tool_source", "tool_version", "data_source", "data_collection_date", "repo_archived", "repo_archived_date_collected") VALUES (24442, 10, 'https://github.com/operate-first/blueprint', 'github.com/operate-first/', 'blueprint', '2021-08-25 16:47:47', 'Complete', '', NULL, NULL, NULL, NULL, NULL, 'Parent not available', NULL, 'CLI', '1.0', 'Git', '2021-08-25 16:47:47', 0, NULL);
INSERT INTO "augur_data"."repo" ("repo_id", "repo_group_id", "repo_git", "repo_path", "repo_name", "repo_added", "repo_status", "repo_type", "url", "owner_id", "description", "primary_language", "created_at", "forked_from", "updated_at", "tool_source", "tool_version", "data_source", "data_collection_date", "repo_archived", "repo_archived_date_collected") VALUES (25445, 10, 'https://github.com/chaoss/grimoirelab-perceval-opnfv', 'github.com/chaoss/', 'grimoirelab-perceval-opnfv', '2020-04-17 21:40:39', 'Complete', '', NULL, NULL, NULL, NULL, NULL, 'Parent not available', NULL, 'CLI', '1.0', 'Git', '2021-04-17 21:40:39', 0, NULL);
INSERT INTO "augur_data"."repo" ("repo_id", "repo_group_id", "repo_git", "repo_path", "repo_name", "repo_added", "repo_status", "repo_type", "url", "owner_id", "description", "primary_language", "created_at", "forked_from", "updated_at", "tool_source", "tool_version", "data_source", "data_collection_date", "repo_archived", "repo_archived_date_collected") VALUES (1, 1, 'https://github.com/chaoss/augur', 'github.com/chaoss/', 'augur', '2021-08-10 14:28:44', 'Complete', '', NULL, NULL, NULL, NULL, NULL, 'Parent not available', NULL, 'data load', 'one', 'git', '2021-06-05 18:41:14', 0, NULL);
INSERT INTO "augur_data"."repo" ("repo_id", "repo_group_id", "repo_git", "repo_path", "repo_name", "repo_added", "repo_status", "repo_type", "url", "owner_id", "description", "primary_language", "created_at", "forked_from", "updated_at", "tool_source", "tool_version", "data_source", "data_collection_date", "repo_archived", "repo_archived_date_collected") VALUES (25430, 10, 'https://github.com/SociallyCompute/update-test', 'github.com/SociallyCompute/', 'update-test', '2021-10-07 08:50:13', 'Complete', '', NULL, NULL, NULL, NULL, NULL, 'Parent not available', NULL, NULL, NULL, NULL, NULL, 0, NULL);
INSERT INTO "augur_data"."repo" ("repo_id", "repo_group_id", "repo_git", "repo_path", "repo_name", "repo_added", "repo_status", "repo_type", "url", "owner_id", "description", "primary_language", "created_at", "forked_from", "updated_at", "tool_source", "tool_version", "data_source", "data_collection_date", "repo_archived", "repo_archived_date_collected") VALUES (25450, 10, 'https://github.com/chaoss/grimoirelab-hatstall', 'github.com/chaoss/', 'grimoirelab-hatstall', '2021-04-17 21:40:42', 'Complete', '', NULL, NULL, NULL, NULL, NULL, 'Parent not available', NULL, 'CLI', '1.0', 'Git', '2021-04-17 21:40:42', 0, NULL);
INSERT INTO "augur_data"."repo" ("repo_id", "repo_group_id", "repo_git", "repo_path", "repo_name", "repo_status", "repo_type", "url", "owner_id", "description", "primary_language", "created_at", "forked_from", "updated_at", "tool_source", "tool_version", "data_source", "data_collection_date", "repo_archived", "repo_archived_date_collected") VALUES (25452, 10, 'https://github.com/chaoss/whitepaper', 'github.com/chaoss/', 'whitepaper', 'Complete', '', NULL, NULL, NULL, NULL, NULL, 'Parent not available', NULL, 'CLI', '1.0', 'Git', '2021-04-17 21:40:42', 0, NULL);
INSERT INTO "augur_data"."repo" ("repo_id", "repo_group_id", "repo_git", "repo_path", "repo_name", "repo_status", "repo_type", "url", "owner_id", "description", "primary_language", "created_at", "forked_from", "updated_at", "tool_source", "tool_version", "data_source", "data_collection_date", "repo_archived", "repo_archived_date_collected") VALUES (24441, 10, 'https://github.com/operate-first/operate-first-twitter', 'github.com/operate-first/', 'operate-first-twitter', 'Complete', '', NULL, NULL, NULL, NULL, NULL, 'Parent not available', NULL, 'CLI', '1.0', 'Git', '2021-08-25 16:47:47', 0, NULL);
INSERT INTO "augur_data"."repo" ("repo_id", "repo_group_id", "repo_git", "repo_path", "repo_name", "repo_status", "repo_type", "url", "owner_id", "description", "primary_language", "created_at", "forked_from", "updated_at", "tool_source", "tool_version", "data_source", "data_collection_date", "repo_archived", "repo_archived_date_collected") VALUES (24442, 10, 'https://github.com/operate-first/blueprint', 'github.com/operate-first/', 'blueprint', 'Complete', '', NULL, NULL, NULL, NULL, NULL, 'Parent not available', NULL, 'CLI', '1.0', 'Git', '2021-08-25 16:47:47', 0, NULL);
INSERT INTO "augur_data"."repo" ("repo_id", "repo_group_id", "repo_git", "repo_path", "repo_name", "repo_status", "repo_type", "url", "owner_id", "description", "primary_language", "created_at", "forked_from", "updated_at", "tool_source", "tool_version", "data_source", "data_collection_date", "repo_archived", "repo_archived_date_collected") VALUES (25445, 10, 'https://github.com/chaoss/grimoirelab-perceval-opnfv', 'github.com/chaoss/', 'grimoirelab-perceval-opnfv', 'Complete', '', NULL, NULL, NULL, NULL, NULL, 'Parent not available', NULL, 'CLI', '1.0', 'Git', '2021-04-17 21:40:39', 0, NULL);
INSERT INTO "augur_data"."repo" ("repo_id", "repo_group_id", "repo_git", "repo_path", "repo_name", "repo_status", "repo_type", "url", "owner_id", "description", "primary_language", "created_at", "forked_from", "updated_at", "tool_source", "tool_version", "data_source", "data_collection_date", "repo_archived", "repo_archived_date_collected") VALUES (1, 1, 'https://github.com/chaoss/augur', 'github.com/chaoss/', 'augur', 'Complete', '', NULL, NULL, NULL, NULL, NULL, 'Parent not available', NULL, 'data load', 'one', 'git', '2021-06-05 18:41:14', 0, NULL);
INSERT INTO "augur_data"."repo" ("repo_id", "repo_group_id", "repo_git", "repo_path", "repo_name", "repo_status", "repo_type", "url", "owner_id", "description", "primary_language", "created_at", "forked_from", "updated_at", "tool_source", "tool_version", "data_source", "data_collection_date", "repo_archived", "repo_archived_date_collected") VALUES (25430, 10, 'https://github.com/SociallyCompute/update-test', 'github.com/SociallyCompute/', 'update-test', 'Complete', '', NULL, NULL, NULL, NULL, NULL, 'Parent not available', NULL, NULL, NULL, NULL, NULL, 0, NULL);
INSERT INTO "augur_data"."repo" ("repo_id", "repo_group_id", "repo_git", "repo_path", "repo_name", "repo_status", "repo_type", "url", "owner_id", "description", "primary_language", "created_at", "forked_from", "updated_at", "tool_source", "tool_version", "data_source", "data_collection_date", "repo_archived", "repo_archived_date_collected") VALUES (25450, 10, 'https://github.com/chaoss/grimoirelab-hatstall', 'github.com/chaoss/', 'grimoirelab-hatstall', 'Complete', '', NULL, NULL, NULL, NULL, NULL, 'Parent not available', NULL, 'CLI', '1.0', 'Git', '2021-04-17 21:40:42', 0, NULL);

UPDATE "augur_data"."repo" set repo_name = NULL, repo_path = NULL, repo_status = 'New';

Expand Down
35 changes: 33 additions & 2 deletions augur/tasks/git/facade_tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,13 @@
from datetime import timedelta
import sqlalchemy as s

from sqlalchemy import or_, and_, update

from augur.tasks.git.util.facade_worker.facade_worker.facade02utilitymethods import update_repo_log, trim_commit, store_working_author, trim_author
from augur.tasks.git.util.facade_worker.facade_worker.facade02utilitymethods import get_absolute_repo_path, get_parent_commits_set, get_existing_commits_set
from augur.tasks.git.util.facade_worker.facade_worker.facade03analyzecommit import analyze_commit
from augur.tasks.git.util.facade_worker.facade_worker.facade02utilitymethods import get_facade_weight_time_factor, get_repo_commit_count

from augur.tasks.github.facade_github.tasks import *

from augur.tasks.util.worker_util import create_grouped_task_load
Expand Down Expand Up @@ -347,6 +350,31 @@ def git_repo_initialize_facade_task(repo_git):
# with FacadeSession(logger) as session:
# check_for_repo_updates(session, repo_git)

@celery.task
def git_update_commit_count_weight(repo_git):

from augur.tasks.init.celery_app import engine
logger = logging.getLogger(git_update_commit_count_weight.__name__)

with FacadeSession(logger) as session:
commit_count = get_repo_commit_count(session, repo_git)
date_factor = get_facade_weight_time_factor(session, repo_git)

weight = commit_count - date_factor
logger.info(f"Repo {repo_git} has a weight of {weight} and a commit count of {commit_count}")

with DatabaseSession(logger,engine=engine) as session:
repo = Repo.get_by_repo_git(session, repo_git)

update_query = (
update(CollectionStatus)
.where(CollectionStatus.repo_id == repo.repo_id)
.values(facade_weight=weight,commit_sum=commit_count)
)

session.execute(update_query)
session.commit()


@celery.task
def git_repo_updates_facade_task(repo_git):
Expand Down Expand Up @@ -460,7 +488,9 @@ def facade_clone_update_phase(repo_git):

if not limited_run or (limited_run and pull_repos):
facade_sequence.append(git_repo_updates_facade_task.si(repo_git))


facade_sequence.append(git_update_commit_count_weight.si(repo_git))

return chain(*facade_sequence)


Expand Down Expand Up @@ -507,7 +537,8 @@ def facade_phase(repo_git):
group(
chain(*facade_core_collection),
process_dependency_metrics.si(repo_git),
process_libyear_dependency_metrics.si(repo_git)
process_libyear_dependency_metrics.si(repo_git),
git_update_commit_count_weight.si(repo_git)
)
)

Expand Down