MCPcopy Index your code
hub / github.com/idank/explainshell / cmd_extract

Function cmd_extract

tools/fetch_manned.py:132–242  ·  view source on GitHub ↗

Extract man pages from the downloaded dump files.

(args)

Source from the content-addressed store, hash-verified

130
131
132def cmd_extract(args):
133 """Extract man pages from the downloaded dump files."""
134 for cmd in ["zstd"]:
135 if subprocess.run(["which", cmd], capture_output=True).returncode != 0:
136 logger.error("Required command '%s' not found. Please install it.", cmd)
137 sys.exit(1)
138
139 data_dir = args.data_dir
140 distro = args.distro.lower()
141
142 # Check that dump files exist
143 for fname in ALL_FILES:
144 zst_path = os.path.join(data_dir, fname)
145 if not os.path.exists(zst_path):
146 logger.error("Missing dump file: %s. Run 'download' first.", zst_path)
147 sys.exit(1)
148
149 # Decompress metadata files (small ones, skip contents)
150 metadata_files = [f for f in ALL_FILES if f != "contents.tsv.zst"]
151 for fname in metadata_files:
152 decompress_zst(os.path.join(data_dir, fname))
153
154 # Parse sections filter
155 sections = None
156 if args.sections:
157 sections = set(args.sections.split(","))
158 logger.info("Filtering to sections: %s", sections)
159
160 # Load metadata
161 logger.info("=== Loading metadata ===")
162 systems, english_locale_ids, mans, packages, pkg_versions = load_metadata(data_dir)
163
164 # Find matching system IDs for the requested distro
165 distro_systems = {} # sys_id -> (name, release, short)
166 for sys_id, (name, release, short) in systems.items():
167 if distro in name.lower():
168 distro_systems[sys_id] = (name, release, short)
169 if not distro_systems:
170 available = sorted(set(name.lower() for name, _, _ in systems.values()))
171 logger.error(
172 "No systems found matching distro '%s'. Available: %s", distro, available
173 )
174 sys.exit(1)
175
176 # Filter by release
177 release = args.release
178 if release == "latest":
179 # Pick the latest release by sorting version strings
180 releases = set(r for _, r, _ in distro_systems.values() if r)
181 if not releases:
182 # Rolling-release distro (e.g. Arch Linux) — no versioned releases.
183 # Use "latest" as a synthetic release label so the on-disk layout
184 # keeps the distro/release/section/file.gz convention expected by
185 # source_from_path().
186 release = "latest"
187 logger.info("Rolling-release distro, using 'latest' as release label")
188 else:
189 release = sorted(releases, key=parse_version)[-1]

Callers 1

mainFunction · 0.85

Calls 6

decompress_zstFunction · 0.85
load_metadataFunction · 0.85
select_content_idsFunction · 0.85
extract_contentsFunction · 0.85
resolve_so_redirectsFunction · 0.85
addMethod · 0.80

Tested by

no test coverage detected