diff options
author | Mike Frysinger <vapier@google.com> | 2023-10-19 05:13:32 -0400 |
---|---|---|
committer | LUCI <gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2023-10-20 04:51:01 +0000 |
commit | d4aee6570b64c5b6de584b0a5ce76e6a139faf38 (patch) | |
tree | c70cfd687689cff85ca7682071ccd0c8f690536c | |
parent | 024df06ec15d7304fbb5f9a2b1aa44f2af9daf4c (diff) | |
download | git-repo-d4aee6570b64c5b6de584b0a5ce76e6a139faf38.tar.gz |
delete Python 2 (object) compat
Bug: 302871152
Change-Id: I39636d73a6e1d69efa8ade74f75c5381651e6dc8
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/390054
Commit-Queue: Mike Frysinger <vapier@google.com>
Reviewed-by: Aravind Vasudevan <aravindvasudev@google.com>
Tested-by: Mike Frysinger <vapier@google.com>
-rw-r--r-- | color.py | 2 | ||||
-rw-r--r-- | command.py | 6 | ||||
-rw-r--r-- | editor.py | 2 | ||||
-rw-r--r-- | event_log.py | 2 | ||||
-rw-r--r-- | git_command.py | 6 | ||||
-rw-r--r-- | git_config.py | 8 | ||||
-rw-r--r-- | git_refs.py | 2 | ||||
-rw-r--r-- | git_superproject.py | 2 | ||||
-rw-r--r-- | git_trace2_event_log_base.py | 2 | ||||
-rw-r--r-- | hooks.py | 2 | ||||
-rwxr-xr-x | main.py | 2 | ||||
-rw-r--r-- | manifest_xml.py | 6 | ||||
-rw-r--r-- | progress.py | 2 | ||||
-rw-r--r-- | project.py | 26 | ||||
-rwxr-xr-x | repo | 6 | ||||
-rw-r--r-- | subcmds/branches.py | 2 | ||||
-rw-r--r-- | subcmds/sync.py | 4 | ||||
-rw-r--r-- | tests/test_git_command.py | 2 | ||||
-rw-r--r-- | tests/test_project.py | 2 |
19 files changed, 43 insertions, 43 deletions
@@ -103,7 +103,7 @@ def SetDefaultColoring(state): | |||
103 | DEFAULT = "never" | 103 | DEFAULT = "never" |
104 | 104 | ||
105 | 105 | ||
106 | class Coloring(object): | 106 | class Coloring: |
107 | def __init__(self, config, section_type): | 107 | def __init__(self, config, section_type): |
108 | self._section = "color.%s" % section_type | 108 | self._section = "color.%s" % section_type |
109 | self._config = config | 109 | self._config = config |
@@ -46,7 +46,7 @@ class UsageError(RepoExitError): | |||
46 | """Exception thrown with invalid command usage.""" | 46 | """Exception thrown with invalid command usage.""" |
47 | 47 | ||
48 | 48 | ||
49 | class Command(object): | 49 | class Command: |
50 | """Base class for any command line action in repo.""" | 50 | """Base class for any command line action in repo.""" |
51 | 51 | ||
52 | # Singleton for all commands to track overall repo command execution and | 52 | # Singleton for all commands to track overall repo command execution and |
@@ -498,11 +498,11 @@ class PagedCommand(Command): | |||
498 | return True | 498 | return True |
499 | 499 | ||
500 | 500 | ||
501 | class MirrorSafeCommand(object): | 501 | class MirrorSafeCommand: |
502 | """Command permits itself to run within a mirror, and does not require a | 502 | """Command permits itself to run within a mirror, and does not require a |
503 | working directory. | 503 | working directory. |
504 | """ | 504 | """ |
505 | 505 | ||
506 | 506 | ||
507 | class GitcClientCommand(object): | 507 | class GitcClientCommand: |
508 | """Command that requires the local client to be a GITC client.""" | 508 | """Command that requires the local client to be a GITC client.""" |
@@ -22,7 +22,7 @@ from error import EditorError | |||
22 | import platform_utils | 22 | import platform_utils |
23 | 23 | ||
24 | 24 | ||
25 | class Editor(object): | 25 | class Editor: |
26 | """Manages the user's preferred text editor.""" | 26 | """Manages the user's preferred text editor.""" |
27 | 27 | ||
28 | _editor = None | 28 | _editor = None |
diff --git a/event_log.py b/event_log.py index 60c1a437..ef01394a 100644 --- a/event_log.py +++ b/event_log.py | |||
@@ -21,7 +21,7 @@ TASK_SYNC_NETWORK = "sync-network" | |||
21 | TASK_SYNC_LOCAL = "sync-local" | 21 | TASK_SYNC_LOCAL = "sync-local" |
22 | 22 | ||
23 | 23 | ||
24 | class EventLog(object): | 24 | class EventLog: |
25 | """Event log that records events that occurred during a repo invocation. | 25 | """Event log that records events that occurred during a repo invocation. |
26 | 26 | ||
27 | Events are written to the log as a consecutive JSON entries, one per line. | 27 | Events are written to the log as a consecutive JSON entries, one per line. |
diff --git a/git_command.py b/git_command.py index 2e4974fa..0e256392 100644 --- a/git_command.py +++ b/git_command.py | |||
@@ -58,7 +58,7 @@ INVALID_GIT_EXIT_CODE = 126 | |||
58 | logger = RepoLogger(__file__) | 58 | logger = RepoLogger(__file__) |
59 | 59 | ||
60 | 60 | ||
61 | class _GitCall(object): | 61 | class _GitCall: |
62 | @functools.lru_cache(maxsize=None) | 62 | @functools.lru_cache(maxsize=None) |
63 | def version_tuple(self): | 63 | def version_tuple(self): |
64 | ret = Wrapper().ParseGitVersion() | 64 | ret = Wrapper().ParseGitVersion() |
@@ -148,7 +148,7 @@ def GetEventTargetPath(): | |||
148 | return path | 148 | return path |
149 | 149 | ||
150 | 150 | ||
151 | class UserAgent(object): | 151 | class UserAgent: |
152 | """Mange User-Agent settings when talking to external services | 152 | """Mange User-Agent settings when talking to external services |
153 | 153 | ||
154 | We follow the style as documented here: | 154 | We follow the style as documented here: |
@@ -272,7 +272,7 @@ def _build_env( | |||
272 | return env | 272 | return env |
273 | 273 | ||
274 | 274 | ||
275 | class GitCommand(object): | 275 | class GitCommand: |
276 | """Wrapper around a single git invocation.""" | 276 | """Wrapper around a single git invocation.""" |
277 | 277 | ||
278 | def __init__( | 278 | def __init__( |
diff --git a/git_config.py b/git_config.py index c19f7662..4f053ed0 100644 --- a/git_config.py +++ b/git_config.py | |||
@@ -70,7 +70,7 @@ def _key(name): | |||
70 | return ".".join(parts) | 70 | return ".".join(parts) |
71 | 71 | ||
72 | 72 | ||
73 | class GitConfig(object): | 73 | class GitConfig: |
74 | _ForUser = None | 74 | _ForUser = None |
75 | 75 | ||
76 | _ForSystem = None | 76 | _ForSystem = None |
@@ -430,7 +430,7 @@ class RepoConfig(GitConfig): | |||
430 | return os.path.join(repo_config_dir, ".repoconfig/config") | 430 | return os.path.join(repo_config_dir, ".repoconfig/config") |
431 | 431 | ||
432 | 432 | ||
433 | class RefSpec(object): | 433 | class RefSpec: |
434 | """A Git refspec line, split into its components: | 434 | """A Git refspec line, split into its components: |
435 | 435 | ||
436 | forced: True if the line starts with '+' | 436 | forced: True if the line starts with '+' |
@@ -541,7 +541,7 @@ def GetUrlCookieFile(url, quiet): | |||
541 | yield cookiefile, None | 541 | yield cookiefile, None |
542 | 542 | ||
543 | 543 | ||
544 | class Remote(object): | 544 | class Remote: |
545 | """Configuration options related to a remote.""" | 545 | """Configuration options related to a remote.""" |
546 | 546 | ||
547 | def __init__(self, config, name): | 547 | def __init__(self, config, name): |
@@ -723,7 +723,7 @@ class Remote(object): | |||
723 | return self._config.GetString(key, all_keys=all_keys) | 723 | return self._config.GetString(key, all_keys=all_keys) |
724 | 724 | ||
725 | 725 | ||
726 | class Branch(object): | 726 | class Branch: |
727 | """Configuration options related to a single branch.""" | 727 | """Configuration options related to a single branch.""" |
728 | 728 | ||
729 | def __init__(self, config, name): | 729 | def __init__(self, config, name): |
diff --git a/git_refs.py b/git_refs.py index 1f5eaab4..8e8d603a 100644 --- a/git_refs.py +++ b/git_refs.py | |||
@@ -28,7 +28,7 @@ R_WORKTREE_M = R_WORKTREE + "m/" | |||
28 | R_M = "refs/remotes/m/" | 28 | R_M = "refs/remotes/m/" |
29 | 29 | ||
30 | 30 | ||
31 | class GitRefs(object): | 31 | class GitRefs: |
32 | def __init__(self, gitdir): | 32 | def __init__(self, gitdir): |
33 | self._gitdir = gitdir | 33 | self._gitdir = gitdir |
34 | self._phyref = None | 34 | self._phyref = None |
diff --git a/git_superproject.py b/git_superproject.py index 5d8c0d4e..651b6dbb 100644 --- a/git_superproject.py +++ b/git_superproject.py | |||
@@ -66,7 +66,7 @@ class UpdateProjectsResult(NamedTuple): | |||
66 | fatal: bool | 66 | fatal: bool |
67 | 67 | ||
68 | 68 | ||
69 | class Superproject(object): | 69 | class Superproject: |
70 | """Get commit ids from superproject. | 70 | """Get commit ids from superproject. |
71 | 71 | ||
72 | Initializes a local copy of a superproject for the manifest. This allows | 72 | Initializes a local copy of a superproject for the manifest. This allows |
diff --git a/git_trace2_event_log_base.py b/git_trace2_event_log_base.py index d986b240..7b51b753 100644 --- a/git_trace2_event_log_base.py +++ b/git_trace2_event_log_base.py | |||
@@ -42,7 +42,7 @@ import threading | |||
42 | p_init_count = 0 | 42 | p_init_count = 0 |
43 | 43 | ||
44 | 44 | ||
45 | class BaseEventLog(object): | 45 | class BaseEventLog: |
46 | """Event log that records events that occurred during a repo invocation. | 46 | """Event log that records events that occurred during a repo invocation. |
47 | 47 | ||
48 | Events are written to the log as a consecutive JSON entries, one per line. | 48 | Events are written to the log as a consecutive JSON entries, one per line. |
@@ -22,7 +22,7 @@ from error import HookError | |||
22 | from git_refs import HEAD | 22 | from git_refs import HEAD |
23 | 23 | ||
24 | 24 | ||
25 | class RepoHook(object): | 25 | class RepoHook: |
26 | """A RepoHook contains information about a script to run as a hook. | 26 | """A RepoHook contains information about a script to run as a hook. |
27 | 27 | ||
28 | Hooks are used to run a python script before running an upload (for | 28 | Hooks are used to run a python script before running an upload (for |
@@ -186,7 +186,7 @@ global_options.add_option( | |||
186 | ) | 186 | ) |
187 | 187 | ||
188 | 188 | ||
189 | class _Repo(object): | 189 | class _Repo: |
190 | def __init__(self, repodir): | 190 | def __init__(self, repodir): |
191 | self.repodir = repodir | 191 | self.repodir = repodir |
192 | self.commands = all_commands | 192 | self.commands = all_commands |
diff --git a/manifest_xml.py b/manifest_xml.py index 458dfb7d..d2217bb8 100644 --- a/manifest_xml.py +++ b/manifest_xml.py | |||
@@ -119,7 +119,7 @@ def XmlInt(node, attr, default=None): | |||
119 | ) | 119 | ) |
120 | 120 | ||
121 | 121 | ||
122 | class _Default(object): | 122 | class _Default: |
123 | """Project defaults within the manifest.""" | 123 | """Project defaults within the manifest.""" |
124 | 124 | ||
125 | revisionExpr = None | 125 | revisionExpr = None |
@@ -142,7 +142,7 @@ class _Default(object): | |||
142 | return self.__dict__ != other.__dict__ | 142 | return self.__dict__ != other.__dict__ |
143 | 143 | ||
144 | 144 | ||
145 | class _XmlRemote(object): | 145 | class _XmlRemote: |
146 | def __init__( | 146 | def __init__( |
147 | self, | 147 | self, |
148 | name, | 148 | name, |
@@ -354,7 +354,7 @@ class SubmanifestSpec: | |||
354 | self.groups = groups or [] | 354 | self.groups = groups or [] |
355 | 355 | ||
356 | 356 | ||
357 | class XmlManifest(object): | 357 | class XmlManifest: |
358 | """manages the repo configuration file""" | 358 | """manages the repo configuration file""" |
359 | 359 | ||
360 | def __init__( | 360 | def __init__( |
diff --git a/progress.py b/progress.py index 80bc9463..54eb8f93 100644 --- a/progress.py +++ b/progress.py | |||
@@ -82,7 +82,7 @@ def jobs_str(total): | |||
82 | return f"{total} job{'s' if total > 1 else ''}" | 82 | return f"{total} job{'s' if total > 1 else ''}" |
83 | 83 | ||
84 | 84 | ||
85 | class Progress(object): | 85 | class Progress: |
86 | def __init__( | 86 | def __init__( |
87 | self, | 87 | self, |
88 | title, | 88 | title, |
@@ -152,7 +152,7 @@ def _ProjectHooks(): | |||
152 | return _project_hook_list | 152 | return _project_hook_list |
153 | 153 | ||
154 | 154 | ||
155 | class DownloadedChange(object): | 155 | class DownloadedChange: |
156 | _commit_cache = None | 156 | _commit_cache = None |
157 | 157 | ||
158 | def __init__(self, project, base, change_id, ps_id, commit): | 158 | def __init__(self, project, base, change_id, ps_id, commit): |
@@ -178,7 +178,7 @@ class DownloadedChange(object): | |||
178 | return self._commit_cache | 178 | return self._commit_cache |
179 | 179 | ||
180 | 180 | ||
181 | class ReviewableBranch(object): | 181 | class ReviewableBranch: |
182 | _commit_cache = None | 182 | _commit_cache = None |
183 | _base_exists = None | 183 | _base_exists = None |
184 | 184 | ||
@@ -319,7 +319,7 @@ class DiffColoring(Coloring): | |||
319 | self.fail = self.printer("fail", fg="red") | 319 | self.fail = self.printer("fail", fg="red") |
320 | 320 | ||
321 | 321 | ||
322 | class Annotation(object): | 322 | class Annotation: |
323 | def __init__(self, name, value, keep): | 323 | def __init__(self, name, value, keep): |
324 | self.name = name | 324 | self.name = name |
325 | self.value = value | 325 | self.value = value |
@@ -386,7 +386,7 @@ def _SafeExpandPath(base, subpath, skipfinal=False): | |||
386 | return path | 386 | return path |
387 | 387 | ||
388 | 388 | ||
389 | class _CopyFile(object): | 389 | class _CopyFile: |
390 | """Container for <copyfile> manifest element.""" | 390 | """Container for <copyfile> manifest element.""" |
391 | 391 | ||
392 | def __init__(self, git_worktree, src, topdir, dest): | 392 | def __init__(self, git_worktree, src, topdir, dest): |
@@ -435,7 +435,7 @@ class _CopyFile(object): | |||
435 | logger.error("error: Cannot copy file %s to %s", src, dest) | 435 | logger.error("error: Cannot copy file %s to %s", src, dest) |
436 | 436 | ||
437 | 437 | ||
438 | class _LinkFile(object): | 438 | class _LinkFile: |
439 | """Container for <linkfile> manifest element.""" | 439 | """Container for <linkfile> manifest element.""" |
440 | 440 | ||
441 | def __init__(self, git_worktree, src, topdir, dest): | 441 | def __init__(self, git_worktree, src, topdir, dest): |
@@ -518,7 +518,7 @@ class _LinkFile(object): | |||
518 | self.__linkIt(relSrc, absDest) | 518 | self.__linkIt(relSrc, absDest) |
519 | 519 | ||
520 | 520 | ||
521 | class RemoteSpec(object): | 521 | class RemoteSpec: |
522 | def __init__( | 522 | def __init__( |
523 | self, | 523 | self, |
524 | name, | 524 | name, |
@@ -538,7 +538,7 @@ class RemoteSpec(object): | |||
538 | self.fetchUrl = fetchUrl | 538 | self.fetchUrl = fetchUrl |
539 | 539 | ||
540 | 540 | ||
541 | class Project(object): | 541 | class Project: |
542 | # These objects can be shared between several working trees. | 542 | # These objects can be shared between several working trees. |
543 | @property | 543 | @property |
544 | def shareable_dirs(self): | 544 | def shareable_dirs(self): |
@@ -3475,7 +3475,7 @@ class Project(object): | |||
3475 | ) | 3475 | ) |
3476 | return logs | 3476 | return logs |
3477 | 3477 | ||
3478 | class _GitGetByExec(object): | 3478 | class _GitGetByExec: |
3479 | def __init__(self, project, bare, gitdir): | 3479 | def __init__(self, project, bare, gitdir): |
3480 | self._project = project | 3480 | self._project = project |
3481 | self._bare = bare | 3481 | self._bare = bare |
@@ -3530,7 +3530,7 @@ class Project(object): | |||
3530 | except StopIteration: | 3530 | except StopIteration: |
3531 | break | 3531 | break |
3532 | 3532 | ||
3533 | class _Info(object): | 3533 | class _Info: |
3534 | def __init__(self, path, omode, nmode, oid, nid, state): | 3534 | def __init__(self, path, omode, nmode, oid, nid, state): |
3535 | self.path = path | 3535 | self.path = path |
3536 | self.src_path = None | 3536 | self.src_path = None |
@@ -3716,7 +3716,7 @@ class _DirtyError(LocalSyncFail): | |||
3716 | return "contains uncommitted changes" | 3716 | return "contains uncommitted changes" |
3717 | 3717 | ||
3718 | 3718 | ||
3719 | class _InfoMessage(object): | 3719 | class _InfoMessage: |
3720 | def __init__(self, project, text): | 3720 | def __init__(self, project, text): |
3721 | self.project = project | 3721 | self.project = project |
3722 | self.text = text | 3722 | self.text = text |
@@ -3728,7 +3728,7 @@ class _InfoMessage(object): | |||
3728 | syncbuf.out.nl() | 3728 | syncbuf.out.nl() |
3729 | 3729 | ||
3730 | 3730 | ||
3731 | class _Failure(object): | 3731 | class _Failure: |
3732 | def __init__(self, project, why): | 3732 | def __init__(self, project, why): |
3733 | self.project = project | 3733 | self.project = project |
3734 | self.why = why | 3734 | self.why = why |
@@ -3740,7 +3740,7 @@ class _Failure(object): | |||
3740 | syncbuf.out.nl() | 3740 | syncbuf.out.nl() |
3741 | 3741 | ||
3742 | 3742 | ||
3743 | class _Later(object): | 3743 | class _Later: |
3744 | def __init__(self, project, action): | 3744 | def __init__(self, project, action): |
3745 | self.project = project | 3745 | self.project = project |
3746 | self.action = action | 3746 | self.action = action |
@@ -3766,7 +3766,7 @@ class _SyncColoring(Coloring): | |||
3766 | self.fail = self.printer("fail", fg="red") | 3766 | self.fail = self.printer("fail", fg="red") |
3767 | 3767 | ||
3768 | 3768 | ||
3769 | class SyncBuffer(object): | 3769 | class SyncBuffer: |
3770 | def __init__(self, config, detach_head=False): | 3770 | def __init__(self, config, detach_head=False): |
3771 | self._messages = [] | 3771 | self._messages = [] |
3772 | self._failures = [] | 3772 | self._failures = [] |
@@ -40,7 +40,7 @@ MIN_PYTHON_VERSION_HARD = (3, 5) | |||
40 | 40 | ||
41 | 41 | ||
42 | # Keep basic logic in sync with repo_trace.py. | 42 | # Keep basic logic in sync with repo_trace.py. |
43 | class Trace(object): | 43 | class Trace: |
44 | """Trace helper logic.""" | 44 | """Trace helper logic.""" |
45 | 45 | ||
46 | REPO_TRACE = "REPO_TRACE" | 46 | REPO_TRACE = "REPO_TRACE" |
@@ -1214,7 +1214,7 @@ def _FindRepo(): | |||
1214 | return (repo, os.path.join(curdir, repodir)) | 1214 | return (repo, os.path.join(curdir, repodir)) |
1215 | 1215 | ||
1216 | 1216 | ||
1217 | class _Options(object): | 1217 | class _Options: |
1218 | help = False | 1218 | help = False |
1219 | version = False | 1219 | version = False |
1220 | 1220 | ||
@@ -1258,7 +1258,7 @@ def _ParseArguments(args): | |||
1258 | return cmd, opt, arg | 1258 | return cmd, opt, arg |
1259 | 1259 | ||
1260 | 1260 | ||
1261 | class Requirements(object): | 1261 | class Requirements: |
1262 | """Helper for checking repo's system requirements.""" | 1262 | """Helper for checking repo's system requirements.""" |
1263 | 1263 | ||
1264 | REQUIREMENTS_NAME = "requirements.json" | 1264 | REQUIREMENTS_NAME = "requirements.json" |
diff --git a/subcmds/branches.py b/subcmds/branches.py index 33523c38..d9a190be 100644 --- a/subcmds/branches.py +++ b/subcmds/branches.py | |||
@@ -28,7 +28,7 @@ class BranchColoring(Coloring): | |||
28 | self.notinproject = self.printer("notinproject", fg="red") | 28 | self.notinproject = self.printer("notinproject", fg="red") |
29 | 29 | ||
30 | 30 | ||
31 | class BranchInfo(object): | 31 | class BranchInfo: |
32 | def __init__(self, name): | 32 | def __init__(self, name): |
33 | self.name = name | 33 | self.name = name |
34 | self.current = 0 | 34 | self.current = 0 |
diff --git a/subcmds/sync.py b/subcmds/sync.py index e1f7d019..dbdaa2c2 100644 --- a/subcmds/sync.py +++ b/subcmds/sync.py | |||
@@ -1908,7 +1908,7 @@ def _PostRepoFetch(rp, repo_verify=True, verbose=False): | |||
1908 | print("repo version %s is current" % rp.work_git.describe(HEAD)) | 1908 | print("repo version %s is current" % rp.work_git.describe(HEAD)) |
1909 | 1909 | ||
1910 | 1910 | ||
1911 | class _FetchTimes(object): | 1911 | class _FetchTimes: |
1912 | _ALPHA = 0.5 | 1912 | _ALPHA = 0.5 |
1913 | 1913 | ||
1914 | def __init__(self, manifest): | 1914 | def __init__(self, manifest): |
@@ -1951,7 +1951,7 @@ class _FetchTimes(object): | |||
1951 | platform_utils.remove(self._path, missing_ok=True) | 1951 | platform_utils.remove(self._path, missing_ok=True) |
1952 | 1952 | ||
1953 | 1953 | ||
1954 | class LocalSyncState(object): | 1954 | class LocalSyncState: |
1955 | _LAST_FETCH = "last_fetch" | 1955 | _LAST_FETCH = "last_fetch" |
1956 | _LAST_CHECKOUT = "last_checkout" | 1956 | _LAST_CHECKOUT = "last_checkout" |
1957 | 1957 | ||
diff --git a/tests/test_git_command.py b/tests/test_git_command.py index 881cccb8..7c108ccd 100644 --- a/tests/test_git_command.py +++ b/tests/test_git_command.py | |||
@@ -72,7 +72,7 @@ class GitCommandWaitTest(unittest.TestCase): | |||
72 | """Tests the GitCommand class .Wait()""" | 72 | """Tests the GitCommand class .Wait()""" |
73 | 73 | ||
74 | def setUp(self): | 74 | def setUp(self): |
75 | class MockPopen(object): | 75 | class MockPopen: |
76 | rc = 0 | 76 | rc = 0 |
77 | 77 | ||
78 | def __init__(self): | 78 | def __init__(self): |
diff --git a/tests/test_project.py b/tests/test_project.py index 79728d70..42f0f6e5 100644 --- a/tests/test_project.py +++ b/tests/test_project.py | |||
@@ -48,7 +48,7 @@ def TempGitTree(): | |||
48 | yield tempdir | 48 | yield tempdir |
49 | 49 | ||
50 | 50 | ||
51 | class FakeProject(object): | 51 | class FakeProject: |
52 | """A fake for Project for basic functionality.""" | 52 | """A fake for Project for basic functionality.""" |
53 | 53 | ||
54 | def __init__(self, worktree): | 54 | def __init__(self, worktree): |