HTTrack Website Copier, copy websites to your computer (Official repository)
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
Add an opt-in pre-commit hook that auto-formats changed C lines Enable with: git config core.hooksPath .githooks The hook runs git-clang-format (clang-format 19, repo .clang-format) on the staged C lines only and re-stages the result, so commits stay clang-format-clean and the CI format check passes without a round-trip. It never reformats the whole tree, only the lines a commit changes. Safe by construction: if clang-format 19 is absent it skips (CI still enforces); and if a file has both staged and unstaged changes it does not auto-mutate (which would commit the unstaged part), it reports and asks the author to stage/stash. HTTRACK_NO_AUTOFORMAT=1 skips it for one commit. README covers the noexec-working-tree case (point core.hooksPath at an exec-fs copy). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> | 17 天前 | |
tests: group zlib-dependent self-tests under 01_zlib-* (#460) The MSan job runs the offline 01_engine-* self-tests but must skip any that exercise the system zlib: uninstrumented libz floods MemorySanitizer with false positives (MSan can't see libz initialize its own internal state, so every byte deflate/inflate produces reads as "uninitialized"). That was a grep -v -- '-cache' exclusion, a list that would grow with each new zlib test. Rename the three cache tests to a 01_zlib-* prefix so the MSan job selects 01_engine-* with no exclusion list. They still run in the normal suite and under ASan+UBSan (full make check), where uninstrumented libz is fine. The deflate Accept-Encoding test (PR #459) follows the same convention. Signed-off-by: Xavier Roche <roche@httrack.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> | 2 天前 | |
Release 3.49.10 (#442) Bump the package version to 3.49.10 and curate the release notes. VERSION_INFO goes 3:1:0 -> 3:2:0: the cycle only appended tail fields to the installed options struct (--cookies-file, --pause, --strip-query, the -%u split), no existing symbol or offset changed, so the soname stays .so.3. history.txt gets the 3.49-10 block; debian/changelog gets 3.49.10-1 with the Debian-specific items (DEP-5 copyright, chromium-first browser dep, minizip embedded-library override). Standards-Version 4.7.0 -> 4.7.4: the intervening Policy changes (usr-merge, /usr/games, Priority recommendation, -dev linker scripts, non-free-firmware) need no package change. Signed-off-by: Xavier Roche <roche@httrack.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> | 3 天前 | |
filters: fix escaped brackets inside *[...] character classes (#440) * filters: decode escaped chars correctly inside *[...] classes The escape branch in strjoker probed joker[i+2] instead of the current char, so a backslash escape only worked as the first class member: '*[\[\]]' (documented as "the [ or ] character") matched only ']', and '*[a,\[]' dropped the 'a'. The loop also treated any ']' as the class terminator, so an escaped ']' could never be a member. Decode the escape first in the loop body: a backslash takes the next char as the literal member (only that char, not also the backslash the old code added), and an escaped ']' is consumed before the terminator check. So '*[\[\]]' now matches both brackets, and escape precedes the range/size checks ('\-' '\,' '\<' become literal members). The self-test previously pinned the buggy output as expected; it now asserts the documented behavior and fails against the old matcher. Closes #148 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: Xavier Roche <roche@httrack.com> * filters: fix a 1-byte over-read on a truncated range *[a- The *[...] class parser's range arm does i += 3 unconditionally, so a pattern ending in a dangling '-' (e.g. *[a-) read one byte past the NUL: joker[i+2] is the NUL, i jumps to len+1, and the separator skip and loop guard then read joker[len+1]. Guard the range arm on joker[i+2] != '\0' so a truncated range falls through to the literal-member path instead of overshooting. The filter self-test now copies the pattern and string into exact-size heap buffers so a sanitizer traps such over-reads; the pattern previously came straight from argv (no redzone), which is why this stayed invisible. A *[a- test case exercises it. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: Xavier Roche <roche@httrack.com> --------- Signed-off-by: Xavier Roche <roche@httrack.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> | 3 天前 | |
lang: add a translation guide and fix the English colon spacing (#439) Document the lang/*.txt format and contribution flow in lang/README.md (linked from CONTRIBUTING.md); the project had no written instructions for translators. Also drop the stray space before the colon in the English "Filters (refuse/accept links):" label so it matches the other labels. Only the English.txt value is changed, not the msgid key, so existing translations still resolve. Closes #74 Closes #75 Signed-off-by: Xavier Roche <roche@httrack.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> | 3 天前 | |
build: stop tracking generated autotools files; add bootstrap/build.sh The generated build system (configure, every Makefile.in, config.h.in, ltmain.sh, config.guess/sub, the aux scripts) was committed so a bare git clone could build without autotools. Nothing downstream relied on the committed copies: CI runs autoreconf -fi, Debian regenerates via dh_autoreconf, and the release tarball is built by make dist, which regenerates them regardless. The only cost was a recurring footgun: a stale Makefile.in after a *_SOURCES edit silently broke the plain build (undefined reference to cache_selftests), and CI could not catch it. Treat them as build products. They are now .gitignored and regenerated from configure.ac/Makefile.am by the new ./bootstrap (autoreconf -fi), and shipped only inside make dist tarballs so tarball users still need no autotools. build.sh is a one-shot wrapper (bootstrap + configure + make) that runs configure via /bin/sh, so it survives a noexec source tree. Both scripts join EXTRA_DIST. INSTALL.Linux, README.md and AGENTS.md document the git flow: ./bootstrap before ./configure, autotools required for a git build. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: Xavier Roche <roche@httrack.com> | 14 天前 | |
build: stop tracking generated autotools files; add bootstrap/build.sh The generated build system (configure, every Makefile.in, config.h.in, ltmain.sh, config.guess/sub, the aux scripts) was committed so a bare git clone could build without autotools. Nothing downstream relied on the committed copies: CI runs autoreconf -fi, Debian regenerates via dh_autoreconf, and the release tarball is built by make dist, which regenerates them regardless. The only cost was a recurring footgun: a stale Makefile.in after a *_SOURCES edit silently broke the plain build (undefined reference to cache_selftests), and CI could not catch it. Treat them as build products. They are now .gitignored and regenerated from configure.ac/Makefile.am by the new ./bootstrap (autoreconf -fi), and shipped only inside make dist tarballs so tarball users still need no autotools. build.sh is a one-shot wrapper (bootstrap + configure + make) that runs configure via /bin/sh, so it survives a noexec source tree. Both scripts join EXTRA_DIST. INSTALL.Linux, README.md and AGENTS.md document the git flow: ./bootstrap before ./configure, autotools required for a git build. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: Xavier Roche <roche@httrack.com> | 14 天前 | |
Add --pause to space out file downloads by a random delay (#185) (#438) A new --pause MIN[:MAX] (seconds, -%G) waits a random MIN..MAX between files so a crawl looks less like a bot and is gentler on the server; a single value is a fixed delay. Disabled by default. It reuses the existing non-blocking launch gate (back_pluggable_sockets_strict): rather than Sleep() -- which would freeze the single select() pump and stall the other in-flight transfers -- the gate just withholds new launches until the delay elapses, one file per gap. The per-gap target is derived from the last-request timestamp so it stays stable across the many gate evaluations within a gap yet rerolls on each launch; sampling rand() per evaluation would instead bias the realized delay toward MIN. Two int fields appended at the httrackp tail (ABI-stable, no soname bump). Covered by a pure-function self-test (range + spread, with teeth against the min-bias bug) and a local-server crawl that asserts the pause slows a multi-file mirror. Closes #185 Signed-off-by: Xavier Roche <roche@httrack.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> | 3 天前 | |
Collapse the 5 inplace_escape_* bodies into one shared helper (#464) DECLARE_INPLACE_ESCAPE_VERSION stamped five byte-identical function bodies, one per escaper. Move the body into a single static inplace_escape() helper parameterized by a function pointer to the underlying escape_*(); the five HTSEXT_API inplace_escape_* symbols stay as thin wrappers, so the exported ABI is unchanged. A new -#test=inplace-escape self-test asserts each inplace_escape_*() equals its escape_*() applied to a copy across several samples (including a >255-byte one to hit the helper's malloct path), guarding the refactor. Signed-off-by: Xavier Roche <roche@httrack.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> | 1 天前 | |
build: stop tracking generated autotools files; add bootstrap/build.sh The generated build system (configure, every Makefile.in, config.h.in, ltmain.sh, config.guess/sub, the aux scripts) was committed so a bare git clone could build without autotools. Nothing downstream relied on the committed copies: CI runs autoreconf -fi, Debian regenerates via dh_autoreconf, and the release tarball is built by make dist, which regenerates them regardless. The only cost was a recurring footgun: a stale Makefile.in after a *_SOURCES edit silently broke the plain build (undefined reference to cache_selftests), and CI could not catch it. Treat them as build products. They are now .gitignored and regenerated from configure.ac/Makefile.am by the new ./bootstrap (autoreconf -fi), and shipped only inside make dist tarballs so tarball users still need no autotools. build.sh is a one-shot wrapper (bootstrap + configure + make) that runs configure via /bin/sh, so it survives a noexec source tree. Both scripts join EXTRA_DIST. INSTALL.Linux, README.md and AGENTS.md document the git flow: ./bootstrap before ./configure, autotools required for a git build. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: Xavier Roche <roche@httrack.com> | 14 天前 | |
Collapse the 5 inplace_escape_* bodies into one shared helper (#464) DECLARE_INPLACE_ESCAPE_VERSION stamped five byte-identical function bodies, one per escaper. Move the body into a single static inplace_escape() helper parameterized by a function pointer to the underlying escape_*(); the five HTSEXT_API inplace_escape_* symbols stay as thin wrappers, so the exported ABI is unchanged. A new -#test=inplace-escape self-test asserts each inplace_escape_*() equals its escape_*() applied to a copy across several samples (including a >255-byte one to hit the helper's malloct path), guarding the refactor. Signed-off-by: Xavier Roche <roche@httrack.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> | 1 天前 | |
Make lintian actually gate the Debian package build (#410) The deb CI job and mkdeb.sh ran lintian via debuild with --fail-on=error,warning and were believed to gate on it. They did not: debuild only reports lintian, it does not propagate lintian's exit status, so a package that lintian flags with errors or warnings still built green. This was demonstrated by a SONAME bump landing without the matching libhttrackN package rename: lintian emitted shared-library-is-multi-arch-foreign and package-name-doesnt-match-sonames, yet the job passed. Disable debuild's lintian run and run lintian ourselves on the produced .changes, under set -e, so any error or warning fails the build. Two CI-only adjustments keep a clean package green: --profile debian, because the Ubuntu runners' vendor data would otherwise reject the Debian "unstable" distribution, and --suppress-tags newer-standards-version, which only reflects the runner's lintian being older than the buildds'. The long-standing script-not-executable hint on the sample search.sh gets an override. Signed-off-by: Xavier Roche <roche@httrack.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> | 11 天前 | |
Separate definition blocks and canonicalize the public headers Set SeparateDefinitionBlocks: Always in .clang-format so clang-format keeps a blank line between adjacent definitions, then reformat the installed (DevIncludes) headers in full. Several of them packed struct/typedef/macro definitions with no separation and carried non-canonical spacing (char*, __attribute__ ((x)), padded inner parens), which made them hard to read; this brings them to the repo's clang-format-19 canonical form and inserts the separating blank lines. Headers only, no semantic change: out-of-tree build is clean and make check passes (21 pass, 7 network skip, 0 fail). htsconfig.h is UTF-8 and its French comments survive byte-for-byte (clang-format only reflowed them to 80 columns). The new option also governs future touched-line formatting of the engine sources. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: Xavier Roche <roche@httrack.com> | 11 天前 | |
tests: add offline local test server prototype (cookies + HTTPS) Replace the network dependency for crawl tests with a self-contained Python stdlib server (http.server + ssl) that httrack crawls over loopback. The server binds an ephemeral port and prints it on stdout; local-crawl.sh discovers the port, substitutes the BASEURL token into the httrack arguments, runs the crawl, and audits the mirror under the discovered host-root directory. This prototype migrates two cases off ut.httrack.com: - 13_local-cookies.test drives the cookie chain (entrance/second/third) reimplemented as Python handlers from the old ut/cookies/*.php fixtures. A missing or wrong cookie answers 500, so a clean 3-files/0-errors run proves the cookie jar is replayed across links. - 14_local-https.test crawls over HTTPS using a shipped long-dated self-signed cert. httrack does not verify certs, so the cert is accepted as-is and the real TLS path runs offline. The group skips (exit 77) when python3 is missing, mirroring check-network.sh. Fixtures and the cert are listed explicitly in EXTRA_DIST (automake does not expand globs); make distcheck passes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: Xavier Roche <roche@httrack.com> | 11 天前 | |
build: stop tracking generated autotools files; add bootstrap/build.sh The generated build system (configure, every Makefile.in, config.h.in, ltmain.sh, config.guess/sub, the aux scripts) was committed so a bare git clone could build without autotools. Nothing downstream relied on the committed copies: CI runs autoreconf -fi, Debian regenerates via dh_autoreconf, and the release tarball is built by make dist, which regenerates them regardless. The only cost was a recurring footgun: a stale Makefile.in after a *_SOURCES edit silently broke the plain build (undefined reference to cache_selftests), and CI could not catch it. Treat them as build products. They are now .gitignored and regenerated from configure.ac/Makefile.am by the new ./bootstrap (autoreconf -fi), and shipped only inside make dist tarballs so tarball users still need no autotools. build.sh is a one-shot wrapper (bootstrap + configure + make) that runs configure via /bin/sh, so it survives a noexec source tree. Both scripts join EXTRA_DIST. INSTALL.Linux, README.md and AGENTS.md document the git flow: ./bootstrap before ./configure, autotools required for a git build. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: Xavier Roche <roche@httrack.com> | 14 天前 | |
Changed .gitmodules submodule pull URL to https, but keeping the push URL (.git/modules/src/coucal/config) to ssh (closes #64) | 11 年前 | |
Replace single-letter -# self-tests with a named -#test=NAME registry (#427) The hidden engine self-tests had accreted into a grab-bag of arbitrary single-letter/-digit -# arms (-#0, -#A, -#W, ...) buried in the htscoremain.c option switch, with no mnemonics and stale --help text. Collapse them into one registry: -#test lists every test with a usage hint and one-line description, and -#test=NAME [args] runs one. The handlers and the two helpers they used (basic_selftests, string_safety_selftests) move to a new htsselftest.c keyed by a {name, args, desc, fn} table; htscoremain.c keeps only a small dispatch that runs ahead of the no-URL usage gate, so a bare -#test (or an arg-less test like copyopt/dns/cookies) no longer needs a dummy URL token to be reached. The genuine debug knobs (-#L, -#C, -#R, -#h, ...) stay as letters in the switch; only the unit self-tests, whose sole callers are tests/01_engine-*.test, are renamed, so this is internal-only with no compatibility surface. Behavior is preserved: each test prints the same result line and exit code, which the existing assertions pin. Three now-unused includes (htscache_selftest.h, htsdns_selftest.h, htsencoding.h) drop out of htscoremain.c. Tests: the engine tests move to -#test=NAME; 01_engine-hashtable now asserts its success line (not just exit code) so a misrouted registry row can't pass, and a new 01_engine-selftest-dispatch covers the bare-list and unknown-name paths. The --help/man "guru options" list now points at -#test instead of enumerating a stale subset. The lone vestigial alias --debug-testfilters still resolves to the removed -#0 (it was already non-functional: param1 supplies one argument, -#0 required two); it is left untouched because editing that array forces clang-format to reflow the whole untouched table. Signed-off-by: Xavier Roche <roche@httrack.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> | 5 天前 | |
AUTHORS should be 644 | 12 年前 | |
Add AGENTS.md operational checklist for AI-assisted contributions LLM-assisted PRs are arriving; give agents one compact, tool-neutral file covering the repo's toolchain rules and invariants so contributions arrive review-ready instead of needing the conventions reconstructed each time. AGENTS.md is the operational checklist (build/test, autotools regen, touched- lines-only formatting, byte-safe Latin-1 edits, overflow-safe bounds, adversarial self-review, commit/PR discipline). CLAUDE.md imports it via @AGENTS.md so Claude Code auto-loads the same source. CONTRIBUTING.md keeps the policy and gains a Co-Authored-By attribution rule plus a PR-conciseness line. Co-Authored-By: Claude <noreply@anthropic.com> Signed-off-by: Xavier Roche <roche@httrack.com> | 15 天前 | |
Add contributor governance: CONTRIBUTING, COC, SECURITY, DCO httrack had no community-health files. Add a short CONTRIBUTING (PR/style basics, security-sensitivity, an outcome-only AI-assistance policy), the Contributor Covenant 2.1 as CODE_OF_CONDUCT, and a SECURITY policy with a verified-reproduction bar for AI-assisted reports. Require a Signed-off-by (DCO) on every commit and enforce it in CI via a new pull_request-only job. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: Xavier Roche <roche@httrack.com> | 17 天前 | |
lang: add a translation guide and fix the English colon spacing (#439) Document the lang/*.txt format and contribution flow in lang/README.md (linked from CONTRIBUTING.md); the project had no written instructions for translators. Also drop the stray space before the colon in the English "Filters (refuse/accept links):" label so it matches the other labels. Only the English.txt value is changed, not the msgid key, so existing translations still resolve. Closes #74 Closes #75 Signed-off-by: Xavier Roche <roche@httrack.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> | 3 天前 | |
GPL v3 | 14 年前 | |
build: symlink ChangeLog and NEWS to history.txt They were empty automake stubs (GNU strictness requires the files to exist). Pointing them at history.txt satisfies automake, drops the confusing empty files, and ships a real changelog in the dist tarball without duplicating content in git. | 23 天前 | |
Regenerate committed autotools/libtool files The tracked generated files (configure, */Makefile.in, ltmain.sh, aux scripts) had drifted stale: src/Makefile.in predated #343, which added htscache_selftest.c to the library sources, so a plain `bash configure && make` link-failed with "undefined reference to cache_selftests". CI regenerates with `autoreconf -fi` on every run, so it never saw the staleness. Regenerate with `autoreconf -fi` so a from-checkout build needs no autotools installed, as intended. This also bumps the generators (autoconf 2.71->2.72, automake 1.17, libtool 2.4.7), hence the large but purely generated diff. Also commit the automake test-driver aux script (its siblings compile, depcomp, missing, install-sh are already committed); without it `make check` on a fresh checkout could not find $(top_srcdir)/test-driver. A clean checkout now builds and passes `make check` with no autotools installed. Signed-off-by: Xavier Roche <roche@httrack.com> | 17 天前 | |
build: stop tracking generated autotools files; add bootstrap/build.sh The generated build system (configure, every Makefile.in, config.h.in, ltmain.sh, config.guess/sub, the aux scripts) was committed so a bare git clone could build without autotools. Nothing downstream relied on the committed copies: CI runs autoreconf -fi, Debian regenerates via dh_autoreconf, and the release tarball is built by make dist, which regenerates them regardless. The only cost was a recurring footgun: a stale Makefile.in after a *_SOURCES edit silently broke the plain build (undefined reference to cache_selftests), and CI could not catch it. Treat them as build products. They are now .gitignored and regenerated from configure.ac/Makefile.am by the new ./bootstrap (autoreconf -fi), and shipped only inside make dist tarballs so tarball users still need no autotools. build.sh is a one-shot wrapper (bootstrap + configure + make) that runs configure via /bin/sh, so it survives a noexec source tree. Both scripts join EXTRA_DIST. INSTALL.Linux, README.md and AGENTS.md document the git flow: ./bootstrap before ./configure, autotools required for a git build. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: Xavier Roche <roche@httrack.com> | 14 天前 | |
build: stop tracking generated autotools files; add bootstrap/build.sh The generated build system (configure, every Makefile.in, config.h.in, ltmain.sh, config.guess/sub, the aux scripts) was committed so a bare git clone could build without autotools. Nothing downstream relied on the committed copies: CI runs autoreconf -fi, Debian regenerates via dh_autoreconf, and the release tarball is built by make dist, which regenerates them regardless. The only cost was a recurring footgun: a stale Makefile.in after a *_SOURCES edit silently broke the plain build (undefined reference to cache_selftests), and CI could not catch it. Treat them as build products. They are now .gitignored and regenerated from configure.ac/Makefile.am by the new ./bootstrap (autoreconf -fi), and shipped only inside make dist tarballs so tarball users still need no autotools. build.sh is a one-shot wrapper (bootstrap + configure + make) that runs configure via /bin/sh, so it survives a noexec source tree. Both scripts join EXTRA_DIST. INSTALL.Linux, README.md and AGENTS.md document the git flow: ./bootstrap before ./configure, autotools required for a git build. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: Xavier Roche <roche@httrack.com> | 14 天前 | |
build: symlink ChangeLog and NEWS to history.txt They were empty automake stubs (GNU strictness requires the files to exist). Pointing them at history.txt satisfies automake, drops the confusing empty files, and ships a real changelog in the dist tarball without duplicating content in git. | 23 天前 | |
Reword the ethical-use notice in source headers The old license-header note ("We hereby ask people using this source NOT to use it in purpose of grabbing emails addresses...") read awkwardly: "in purpose of", "emails addresses", "on persons", and a one-item bullet list under an "Important notes:" heading. Replace it across all source headers, configure/configure.ac, and README with a single clean sentence, and align the wording everywhere: Ethical use: we kindly ask that you NOT use this software to harvest email addresses or to collect any other private information about people. Doing so would dishonor our work and waste the many hours we have spent on it. Pure text change, no behavior impact. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: Xavier Roche <roche@httrack.com> | 17 天前 | |
build: stop tracking generated autotools files; add bootstrap/build.sh The generated build system (configure, every Makefile.in, config.h.in, ltmain.sh, config.guess/sub, the aux scripts) was committed so a bare git clone could build without autotools. Nothing downstream relied on the committed copies: CI runs autoreconf -fi, Debian regenerates via dh_autoreconf, and the release tarball is built by make dist, which regenerates them regardless. The only cost was a recurring footgun: a stale Makefile.in after a *_SOURCES edit silently broke the plain build (undefined reference to cache_selftests), and CI could not catch it. Treat them as build products. They are now .gitignored and regenerated from configure.ac/Makefile.am by the new ./bootstrap (autoreconf -fi), and shipped only inside make dist tarballs so tarball users still need no autotools. build.sh is a one-shot wrapper (bootstrap + configure + make) that runs configure via /bin/sh, so it survives a noexec source tree. Both scripts join EXTRA_DIST. INSTALL.Linux, README.md and AGENTS.md document the git flow: ./bootstrap before ./configure, autotools required for a git build. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: Xavier Roche <roche@httrack.com> | 14 天前 | |
Add obfuscated personal email as alternate security contact Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: Xavier Roche <roche@httrack.com> | 17 天前 | |
build: stop tracking generated autotools files; add bootstrap/build.sh The generated build system (configure, every Makefile.in, config.h.in, ltmain.sh, config.guess/sub, the aux scripts) was committed so a bare git clone could build without autotools. Nothing downstream relied on the committed copies: CI runs autoreconf -fi, Debian regenerates via dh_autoreconf, and the release tarball is built by make dist, which regenerates them regardless. The only cost was a recurring footgun: a stale Makefile.in after a *_SOURCES edit silently broke the plain build (undefined reference to cache_selftests), and CI could not catch it. Treat them as build products. They are now .gitignored and regenerated from configure.ac/Makefile.am by the new ./bootstrap (autoreconf -fi), and shipped only inside make dist tarballs so tarball users still need no autotools. build.sh is a one-shot wrapper (bootstrap + configure + make) that runs configure via /bin/sh, so it survives a noexec source tree. Both scripts join EXTRA_DIST. INSTALL.Linux, README.md and AGENTS.md document the git flow: ./bootstrap before ./configure, autotools required for a git build. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: Xavier Roche <roche@httrack.com> | 14 天前 | |
build: stop tracking generated autotools files; add bootstrap/build.sh The generated build system (configure, every Makefile.in, config.h.in, ltmain.sh, config.guess/sub, the aux scripts) was committed so a bare git clone could build without autotools. Nothing downstream relied on the committed copies: CI runs autoreconf -fi, Debian regenerates via dh_autoreconf, and the release tarball is built by make dist, which regenerates them regardless. The only cost was a recurring footgun: a stale Makefile.in after a *_SOURCES edit silently broke the plain build (undefined reference to cache_selftests), and CI could not catch it. Treat them as build products. They are now .gitignored and regenerated from configure.ac/Makefile.am by the new ./bootstrap (autoreconf -fi), and shipped only inside make dist tarballs so tarball users still need no autotools. build.sh is a one-shot wrapper (bootstrap + configure + make) that runs configure via /bin/sh, so it survives a noexec source tree. Both scripts join EXTRA_DIST. INSTALL.Linux, README.md and AGENTS.md document the git flow: ./bootstrap before ./configure, autotools required for a git build. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: Xavier Roche <roche@httrack.com> | 14 天前 | |
Release 3.49.10 (#442) Bump the package version to 3.49.10 and curate the release notes. VERSION_INFO goes 3:1:0 -> 3:2:0: the cycle only appended tail fields to the installed options struct (--cookies-file, --pause, --strip-query, the -%u split), no existing symbol or offset changed, so the soname stays .so.3. history.txt gets the 3.49-10 block; debian/changelog gets 3.49.10-1 with the Debian-specific items (DEP-5 copyright, chromium-first browser dep, minizip embedded-library override). Standards-Version 4.7.0 -> 4.7.4: the intervening Policy changes (usr-merge, /usr/games, Priority recommendation, -dev linker scripts, non-free-firmware) need no package change. Signed-off-by: Xavier Roche <roche@httrack.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> | 3 天前 | |
Converted in UTF-8 | 13 年前 | |
Flush | 12 年前 | |
Release 3.49.10 (#442) Bump the package version to 3.49.10 and curate the release notes. VERSION_INFO goes 3:1:0 -> 3:2:0: the cycle only appended tail fields to the installed options struct (--cookies-file, --pause, --strip-query, the -%u split), no existing symbol or offset changed, so the soname stays .so.3. history.txt gets the 3.49-10 block; debian/changelog gets 3.49.10-1 with the Debian-specific items (DEP-5 copyright, chromium-first browser dep, minizip embedded-library override). Standards-Version 4.7.0 -> 4.7.4: the intervening Policy changes (usr-merge, /usr/games, Priority recommendation, -dev linker scripts, non-free-firmware) need no package change. Signed-off-by: Xavier Roche <roche@httrack.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> | 3 天前 | |
httrack 3.30.1 | 14 年前 | |
Fixed typos | 3 年前 | |
Added Uzbek Latin version (Zafar Shamsiddinov) | 10 年前 | |
license: drop the obsolete OpenSSL linking exception OpenSSL 3.0+ is Apache-2.0 (GPL-compatible) and LibreSSL is BSD, so the GPL linking exception is no longer needed; httrack is now plain GPL-3.0-or-later. license.txt now carries the verbatim GPLv3 (matching COPYING); the ethical-use request moves to README. debian/copyright updated to match. | 24 天前 |
以下内容由 AI 翻译,如有问题请 点此提交 issue 反馈
HTTrack Website Copier - 开发仓库
关于
将网站复制到您的电脑(离线浏览器)

HTTrack 是一款 离线浏览器 工具,它能将互联网上的万维网网站下载到本地目录,并递归创建所有目录,从服务器获取 html、图片及其他文件到您的电脑。
HTTrack 会保留原始网站的相对链接结构。只需在浏览器中打开“镜像”网站的某个页面,您就能像在线浏览一样,通过链接从一个页面跳转到另一个页面。
HTTrack 还可以更新已有的镜像网站,并恢复中断的下载。它具备完全的可配置性,且拥有集成的帮助系统。
WinHTTrack 是 HTTrack 的 Windows 2000/XP/Vista/Seven 版本,而 WebHTTrack 是其 Linux/Unix/BSD 版本。
网站
编译主干版本
Git 检出的代码仅包含 autotools 源文件,因此 ./bootstrap(它会运行 autoreconf)会首先重新生成 configure;这需要 autoconf、automake 和 libtool。已发布的 tarball 已包含 configure,因此从 tarball 构建时可跳过 ./bootstrap。
git clone https://github.com/xroche/httrack.git --recurse-submodules
cd httrack
./bootstrap
./configure --prefix=$HOME/usr && make -j8 && make install
或者使用一次性包装器(bootstrap + configure + make),它会将其参数转发给 configure:
./build.sh --prefix=$HOME/usr