diff options
Diffstat (limited to 'src/setuptools_scm/file_finder_hg.py')
-rw-r--r-- | src/setuptools_scm/file_finder_hg.py | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/setuptools_scm/file_finder_hg.py b/src/setuptools_scm/file_finder_hg.py index 4f5e3ec..2ce974f 100644 --- a/src/setuptools_scm/file_finder_hg.py +++ b/src/setuptools_scm/file_finder_hg.py @@ -2,10 +2,16 @@ from __future__ import annotations import os import subprocess +from typing import TYPE_CHECKING from .file_finder import is_toplevel_acceptable from .file_finder import scm_find_files +from .utils import data_from_mime from .utils import do_ex +from .utils import trace + +if TYPE_CHECKING: + from . import _types as _t def _hg_toplevel(path: str) -> str | None: @@ -49,3 +55,20 @@ def hg_find_files(path: str = "") -> list[str]: assert toplevel is not None hg_files, hg_dirs = _hg_ls_files_and_dirs(toplevel) return scm_find_files(path, hg_files, hg_dirs) + + +def hg_archive_find_files(path: _t.PathT = "") -> list[str]: + # This function assumes that ``path`` is obtained from a mercurial archive + # and therefore all the files that should be ignored were already removed. + archival = os.path.join(path, ".hg_archival.txt") + if not os.path.exists(archival): + return [] + + data = data_from_mime(archival) + + if "node" not in data: + # Ensure file is valid + return [] + + trace("hg archive detected - fallback to listing all files") + return scm_find_files(path, set(), set(), force_all_files=True) |