Skip to content

Commit 2e586fe

Browse files
committed
Split super project
1 parent 9ef6a88 commit 2e586fe

17 files changed

Lines changed: 381 additions & 299 deletions

dfetch/commands/check.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
from dfetch.commands.common import check_child_manifests
3636
from dfetch.log import get_logger
3737
from dfetch.manifest.manifest import Manifest
38-
from dfetch.project.superproject import SuperProject
38+
from dfetch.project import create_super_project
3939
from dfetch.reporting.check.code_climate_reporter import CodeClimateReporter
4040
from dfetch.reporting.check.jenkins_reporter import JenkinsReporter
4141
from dfetch.reporting.check.reporter import CheckReporter
@@ -90,14 +90,14 @@ def create_menu(subparsers: dfetch.commands.command.SubparserActionType) -> None
9090

9191
def __call__(self, args: argparse.Namespace) -> None:
9292
"""Perform the check."""
93-
superproject = SuperProject.create()
93+
superproject = create_super_project()
9494
reporters = self._get_reporters(args, superproject.manifest)
9595

9696
with in_directory(superproject.root_directory):
9797
exceptions: list[str] = []
9898
for project in superproject.manifest.selected_projects(args.projects):
9999
with catch_runtime_exceptions(exceptions) as exceptions:
100-
dfetch.project.make(project).check_for_update(
100+
dfetch.project.create_sub_project(project).check_for_update(
101101
reporters,
102102
files_to_ignore=superproject.ignored_files(project.destination),
103103
)

dfetch/commands/diff.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,9 @@
5959

6060
import dfetch.commands.command
6161
from dfetch.log import get_logger
62+
from dfetch.project import create_super_project
6263
from dfetch.project.metadata import Metadata
63-
from dfetch.project.superproject import NoVcsSuperProject, RevisionRange, SuperProject
64+
from dfetch.project.superproject import NoVcsSuperProject, RevisionRange
6465
from dfetch.util.util import catch_runtime_exceptions, in_directory
6566

6667
logger = get_logger(__name__)
@@ -96,7 +97,7 @@ def create_menu(subparsers: dfetch.commands.command.SubparserActionType) -> None
9697

9798
def __call__(self, args: argparse.Namespace) -> None:
9899
"""Perform the diff."""
99-
superproject = SuperProject.create()
100+
superproject = create_super_project()
100101
old_rev, new_rev = self._parse_revs(args.revs)
101102

102103
if isinstance(superproject, NoVcsSuperProject):

dfetch/commands/environment.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import dfetch.commands.command
77
from dfetch.log import get_logger
8-
from dfetch.project import SUPPORTED_PROJECT_TYPES
8+
from dfetch.project import SUPPORTED_SUBPROJECT_TYPES
99

1010
logger = get_logger(__name__)
1111

@@ -26,5 +26,5 @@ def __call__(self, _: argparse.Namespace) -> None:
2626
logger.print_report_line(
2727
"platform", f"{platform.system()} {platform.release()}"
2828
)
29-
for project_type in SUPPORTED_PROJECT_TYPES:
29+
for project_type in SUPPORTED_SUBPROJECT_TYPES:
3030
project_type.list_tool_info()

dfetch/commands/format_patch.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
import dfetch.manifest.project
3434
import dfetch.project
3535
from dfetch.log import get_logger
36-
from dfetch.project.superproject import SuperProject
36+
from dfetch.project import create_super_project
3737
from dfetch.util.util import catch_runtime_exceptions, in_directory
3838
from dfetch.vcs.patch import PatchAuthor, PatchInfo, add_prefix_to_patch
3939

@@ -69,7 +69,7 @@ def create_menu(subparsers: dfetch.commands.command.SubparserActionType) -> None
6969

7070
def __call__(self, args: argparse.Namespace) -> None:
7171
"""Perform the format patch."""
72-
superproject = SuperProject.create()
72+
superproject = create_super_project()
7373

7474
exceptions: list[str] = []
7575

@@ -86,7 +86,7 @@ def __call__(self, args: argparse.Namespace) -> None:
8686
with in_directory(superproject.root_directory):
8787
for project in superproject.manifest.selected_projects(args.projects):
8888
with catch_runtime_exceptions(exceptions) as exceptions:
89-
subproject = dfetch.project.make(project)
89+
subproject = dfetch.project.create_sub_project(project)
9090

9191
# Check if the project has a patch, maybe suggest creating one?
9292
if not subproject.patch:

dfetch/commands/freeze.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
from dfetch.log import get_logger
5050
from dfetch.manifest.manifest import Manifest
5151
from dfetch.manifest.project import ProjectEntry
52-
from dfetch.project.superproject import SuperProject
52+
from dfetch.project import create_super_project
5353
from dfetch.util.util import catch_runtime_exceptions, in_directory
5454

5555
logger = get_logger(__name__)
@@ -70,15 +70,17 @@ def __call__(self, args: argparse.Namespace) -> None:
7070
"""Perform the freeze."""
7171
del args # unused
7272

73-
superproject = SuperProject.create()
73+
superproject = create_super_project()
7474

7575
exceptions: list[str] = []
7676
projects: list[ProjectEntry] = []
7777

7878
with in_directory(superproject.root_directory):
7979
for project in superproject.manifest.projects:
8080
with catch_runtime_exceptions(exceptions) as exceptions:
81-
on_disk_version = dfetch.project.make(project).on_disk_version()
81+
on_disk_version = dfetch.project.create_sub_project(
82+
project
83+
).on_disk_version()
8284

8385
if project.version == on_disk_version:
8486
logger.print_info_line(

dfetch/commands/import_.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@
9292
from dfetch.manifest.manifest import Manifest
9393
from dfetch.manifest.project import ProjectEntry
9494
from dfetch.manifest.remote import Remote
95-
from dfetch.project.superproject import SuperProject
95+
from dfetch.project import determine_superproject_vcs
9696

9797
logger = get_logger(__name__)
9898

@@ -111,7 +111,7 @@ def create_menu(subparsers: dfetch.commands.command.SubparserActionType) -> None
111111

112112
def __call__(self, _: argparse.Namespace) -> None:
113113
"""Perform the import."""
114-
projects = SuperProject.type_from_path(".").import_projects()
114+
projects = determine_superproject_vcs(".").import_projects()
115115

116116
if not projects:
117117
raise RuntimeError(f"No submodules found in {os.getcwd()}!")

dfetch/commands/report.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@
1212
import dfetch.util.util
1313
from dfetch.log import get_logger
1414
from dfetch.manifest.project import ProjectEntry
15+
from dfetch.project import create_super_project
1516
from dfetch.project.metadata import Metadata
1617
from dfetch.project.subproject import SubProject
17-
from dfetch.project.superproject import SuperProject
1818
from dfetch.reporting import REPORTERS, ReportTypes
1919
from dfetch.util.license import License, guess_license_in_file
2020

@@ -63,7 +63,7 @@ def create_menu(subparsers: dfetch.commands.command.SubparserActionType) -> None
6363

6464
def __call__(self, args: argparse.Namespace) -> None:
6565
"""Generate the report."""
66-
superproject = SuperProject.create()
66+
superproject = create_super_project()
6767

6868
with dfetch.util.util.in_directory(superproject.root_directory):
6969
reporter = REPORTERS[args.type](superproject.manifest)

dfetch/commands/update.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
import dfetch.project
3737
from dfetch.commands.common import check_child_manifests
3838
from dfetch.log import get_logger
39-
from dfetch.project.superproject import SuperProject
39+
from dfetch.project import create_super_project
4040
from dfetch.util.util import catch_runtime_exceptions, in_directory
4141

4242
logger = get_logger(__name__)
@@ -74,7 +74,7 @@ def create_menu(subparsers: dfetch.commands.command.SubparserActionType) -> None
7474

7575
def __call__(self, args: argparse.Namespace) -> None:
7676
"""Perform the update."""
77-
superproject = SuperProject.create()
77+
superproject = create_super_project()
7878

7979
exceptions: list[str] = []
8080
destinations: list[str] = [
@@ -85,7 +85,7 @@ def __call__(self, args: argparse.Namespace) -> None:
8585
for project in superproject.manifest.selected_projects(args.projects):
8686
with catch_runtime_exceptions(exceptions) as exceptions:
8787
self._check_destination(project, destinations)
88-
dfetch.project.make(project).update(
88+
dfetch.project.create_sub_project(project).update(
8989
force=args.force,
9090
files_to_ignore=superproject.ignored_files(project.destination),
9191
)

dfetch/commands/update_patch.py

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,10 @@
4040
import dfetch.manifest.project
4141
import dfetch.project
4242
from dfetch.log import get_logger
43+
from dfetch.project import create_super_project
44+
from dfetch.project.gitsuperproject import GitSuperProject
4345
from dfetch.project.metadata import Metadata
44-
from dfetch.project.superproject import (
45-
GitSuperProject,
46-
NoVcsSuperProject,
47-
RevisionRange,
48-
SuperProject,
49-
)
46+
from dfetch.project.superproject import NoVcsSuperProject, RevisionRange
5047
from dfetch.util.util import catch_runtime_exceptions, in_directory
5148

5249
logger = get_logger(__name__)
@@ -76,7 +73,7 @@ def create_menu(subparsers: dfetch.commands.command.SubparserActionType) -> None
7673

7774
def __call__(self, args: argparse.Namespace) -> None:
7875
"""Perform the update patch."""
79-
superproject = SuperProject.create()
76+
superproject = create_super_project()
8077

8178
exceptions: list[str] = []
8279

@@ -91,7 +88,7 @@ def __call__(self, args: argparse.Namespace) -> None:
9188
with in_directory(superproject.root_directory):
9289
for project in superproject.manifest.selected_projects(args.projects):
9390
with catch_runtime_exceptions(exceptions) as exceptions:
94-
subproject = dfetch.project.make(project)
91+
subproject = dfetch.project.create_sub_project(project)
9592

9693
files_to_ignore = superproject.ignored_files(project.destination)
9794

dfetch/project/__init__.py

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,57 @@
11
"""All Project related items."""
22

3+
import os
4+
import pathlib
5+
from typing import Union
6+
37
import dfetch.manifest.project
8+
from dfetch.log import get_logger
9+
from dfetch.manifest.parse import find_manifest, parse
410
from dfetch.project.gitsubproject import GitSubProject
11+
from dfetch.project.gitsuperproject import GitSuperProject
512
from dfetch.project.subproject import SubProject
13+
from dfetch.project.superproject import NoVcsSuperProject, SuperProject
614
from dfetch.project.svnsubproject import SvnSubProject
15+
from dfetch.project.svnsuperproject import SvnSuperProject
16+
from dfetch.util.util import resolve_absolute_path
17+
18+
SUPPORTED_SUBPROJECT_TYPES = [GitSubProject, SvnSubProject]
19+
SUPPORTED_SUPERPROJECT_TYPES = [GitSuperProject, SvnSuperProject]
720

8-
SUPPORTED_PROJECT_TYPES = [GitSubProject, SvnSubProject]
21+
logger = get_logger(__name__)
922

1023

11-
def make(project_entry: dfetch.manifest.project.ProjectEntry) -> SubProject:
24+
def create_sub_project(
25+
project_entry: dfetch.manifest.project.ProjectEntry,
26+
) -> SubProject:
1227
"""Create a new SubProject based on a project from the manifest."""
13-
for project_type in SUPPORTED_PROJECT_TYPES:
28+
for project_type in SUPPORTED_SUBPROJECT_TYPES:
1429
if project_type.NAME == project_entry.vcs:
1530
return project_type(project_entry)
1631

17-
for project_type in SUPPORTED_PROJECT_TYPES:
32+
for project_type in SUPPORTED_SUBPROJECT_TYPES:
1833
project = project_type(project_entry)
1934

2035
if project.check():
2136
return project
2237
raise RuntimeError("vcs type unsupported")
38+
39+
40+
def create_super_project() -> SuperProject:
41+
"""Create a SuperProject by looking for a manifest file."""
42+
logger.debug("Looking for manifest")
43+
manifest_path = find_manifest()
44+
45+
logger.debug(f"Using manifest {manifest_path}")
46+
manifest = parse(manifest_path)
47+
root_directory = resolve_absolute_path(os.path.dirname(manifest.path))
48+
return determine_superproject_vcs(root_directory)(manifest, root_directory)
49+
50+
51+
def determine_superproject_vcs(path: Union[str, pathlib.Path]) -> type[SuperProject]:
52+
"""Determine correct VCS type of the superproject in the given path."""
53+
for project_type in SUPPORTED_SUPERPROJECT_TYPES:
54+
if project_type.check(path):
55+
return project_type
56+
57+
return NoVcsSuperProject

0 commit comments

Comments
 (0)