Skip to content
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion gittensor/classes.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
)
from gittensor.utils.utils import parse_repo_name

_EXTENSIONLESS_FILE_EXTENSIONS = {'dockerfile', 'makefile'}


def _apply_score_multipliers(base_score: float, multipliers: Dict[str, float], pr_label: str) -> float:
"""Compute earned score and emit the standard scoring log lines."""
Expand Down Expand Up @@ -77,7 +79,10 @@ def __post_init__(self):

def _calculate_file_extension(self) -> str:
basename = self.filename.split('/')[-1]
return basename.split('.')[-1].lower() if '.' in basename else ''
if '.' in basename:
return basename.split('.')[-1].lower()
basename_lower = basename.lower()
return basename_lower if basename_lower in _EXTENSIONLESS_FILE_EXTENSIONS else ''

def is_test_file(self) -> bool:
filename_lower = self.filename.lower()
Expand Down
16 changes: 16 additions & 0 deletions tests/test_classes.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,22 @@ def test_is_test_file_preserves_existing_test_conventions():
assert _file_change('src/foo/bar.py').is_test_file() is False


@pytest.mark.parametrize(
'filename,expected',
[
('Dockerfile', 'dockerfile'),
('dockerfile', 'dockerfile'),
('ops/Dockerfile', 'dockerfile'),
('Makefile', 'makefile'),
('makefile', 'makefile'),
('build.mk', 'mk'),
('README', ''),
],
)
def test_file_extension_handles_configured_extensionless_filenames(filename, expected):
assert _file_change(filename).file_extension == expected


@pytest.mark.parametrize(
'filename',
[
Expand Down
43 changes: 41 additions & 2 deletions tests/validator/test_token_scoring_integration.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,10 @@

import pytest

from gittensor.validator.utils.load_weights import TokenConfig, load_token_config
from gittensor.validator.utils.tree_sitter_scoring import score_tree_diff
from gittensor.classes import FileChange
from gittensor.utils.github_api_tools import FileContentPair
from gittensor.validator.utils.load_weights import TokenConfig, load_programming_language_weights, load_token_config
from gittensor.validator.utils.tree_sitter_scoring import calculate_token_score_from_file_changes, score_tree_diff


class TestTreeDiffScoring:
Expand All @@ -25,6 +27,43 @@ class TestTreeDiffScoring:
def weights(self) -> TokenConfig:
return load_token_config()

@pytest.mark.parametrize(
'filename,old_content,new_content',
[
(
'Dockerfile',
'FROM python:3.12-slim\n',
'FROM python:3.12-slim\nRUN pip install uv\nCOPY . /app\n',
),
(
'Makefile',
'test:\n\tpytest\n',
'test:\n\tpytest\n\nlint:\n\truff check\n',
),
],
)
def test_configured_extensionless_files_reach_tree_diff(self, weights, filename, old_content, new_content):
file_change = FileChange(
pr_number=1,
repository_full_name='test/repo',
filename=filename,
changes=3,
additions=2,
deletions=1,
status='modified',
)
result = calculate_token_score_from_file_changes(
[file_change],
{filename: FileContentPair(old_content=old_content, new_content=new_content)},
weights,
load_programming_language_weights(),
)

file_result = result.file_results[0]
assert file_change.file_extension == filename.lower()
assert file_result.scoring_method == 'tree-diff'
assert file_result.nodes_scored > 0

def test_new_file_scores_all_nodes(self, weights):
"""
Test scoring a completely new file (no old content).
Expand Down
Loading