On Thu, Jan 16, 2025 at 09:23:11AM +0100, Jonas Smedegaard wrote:
> The package librust-tree-sitter-cli-dev failes to build, like this:
>
> error: couldn't read
> `/build/turtlefmt-0.1.2/debian/cargo_registry/tree-sitter-cli-0.22.6/src/generate/./templates/.editorconfig`:
> No such file or directory (os error 2)
> -->
> /build/turtlefmt-0.1.2/debian/cargo_registry/tree-sitter-cli-0.22.6/src/generate/grammar_files.rs:29:37
> |
> 29 | const EDITORCONFIG_TEMPLATE: &str =
> include_str!("./templates/.editorconfig");
> |
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> |
> = note: this error originates in the macro `include_str` (in Nightly
> builds, run with -Z macro-backtrace for more info)
>
> error: could not compile `tree-sitter-cli` (lib) due to 1 previous error
Looking into this some, I manually ran the command that builds the crate
archive and increased the verbosity:
sbuild@sbuild:/build/package/package$ cd cli && cargo package -v -v --offline
--allow-dirty --no-verify --target-dir /build/package/package/target --package
tree-sitter-cli\@0.22.6
warning: no (git) VCS found for `/build/package/package/cli`
Packaging tree-sitter-cli v0.22.6 (/build/package/package/cli)
Archiving Cargo.lock
Archiving Cargo.toml
Archiving Cargo.toml.orig
Archiving README.md
Archiving benches/benchmark.rs
Archiving build.rs
Archiving npm/cli.js
Archiving npm/dsl.d.ts
Archiving npm/install.js
Archiving npm/package.json
Archiving src/generate/build_tables/build_lex_table.rs
Archiving src/generate/build_tables/build_parse_table.rs
Archiving src/generate/build_tables/coincident_tokens.rs
Archiving src/generate/build_tables/item.rs
Archiving src/generate/build_tables/item_set_builder.rs
Archiving src/generate/build_tables/minimize_parse_table.rs
Archiving src/generate/build_tables/mod.rs
Archiving src/generate/build_tables/token_conflicts.rs
Archiving src/generate/dedup.rs
Archiving src/generate/dsl.js
Archiving src/generate/grammar-schema.json
Archiving src/generate/grammar_files.rs
Archiving src/generate/grammars.rs
Archiving src/generate/mod.rs
Archiving src/generate/nfa.rs
Archiving src/generate/node_types.rs
Archiving src/generate/parse_grammar.rs
Archiving src/generate/prepare_grammar/expand_repeats.rs
Archiving src/generate/prepare_grammar/expand_tokens.rs
Archiving src/generate/prepare_grammar/extract_default_aliases.rs
Archiving src/generate/prepare_grammar/extract_tokens.rs
Archiving src/generate/prepare_grammar/flatten_grammar.rs
Archiving src/generate/prepare_grammar/intern_symbols.rs
Archiving src/generate/prepare_grammar/mod.rs
Archiving src/generate/prepare_grammar/process_inlines.rs
Archiving src/generate/prepare_grammar/unicode-categories.json
Archiving src/generate/prepare_grammar/unicode-category-aliases.json
Archiving src/generate/prepare_grammar/unicode-properties.json
Archiving src/generate/prepare_grammar/unicode-property-aliases.json
Archiving src/generate/render.rs
Archiving src/generate/rules.rs
Archiving src/generate/tables.rs
Archiving src/generate/templates/PARSER_NAME.h
Archiving src/generate/templates/PARSER_NAME.pc.in
Archiving src/generate/templates/Package.swift
Archiving src/generate/templates/__init__.py
Archiving src/generate/templates/__init__.pyi
Archiving src/generate/templates/alloc.h
Archiving src/generate/templates/binding.go
Archiving src/generate/templates/binding.gyp
Archiving src/generate/templates/binding_test.go
Archiving src/generate/templates/build.rs
Archiving src/generate/templates/cargo.toml
Archiving src/generate/templates/gitattributes
Archiving src/generate/templates/gitignore
Archiving src/generate/templates/go.mod
Archiving src/generate/templates/grammar.js
Archiving src/generate/templates/index.d.ts
Archiving src/generate/templates/index.js
Archiving src/generate/templates/js-binding.cc
Archiving src/generate/templates/lib.rs
Archiving src/generate/templates/makefile
Archiving src/generate/templates/package.json
Archiving src/generate/templates/py-binding.c
Archiving src/generate/templates/pyproject.toml
Archiving src/generate/templates/setup.py
Archiving src/highlight.rs
Archiving src/lib.rs
Archiving src/logger.rs
Archiving src/main.rs
Archiving src/parse.rs
Archiving src/playground.html
Archiving src/playground.rs
Archiving src/query.rs
Archiving src/query_testing.rs
Archiving src/tags.rs
Archiving src/test.rs
Archiving src/test_highlight.rs
Archiving src/test_tags.rs
Archiving src/tests/async_context_test.rs
Archiving src/tests/corpus_test.rs
Archiving src/tests/detect_language.rs
Archiving src/tests/helpers/allocations.rs
Archiving src/tests/helpers/dirs.rs
Archiving src/tests/helpers/edits.rs
Archiving src/tests/helpers/fixtures.rs
Archiving src/tests/helpers/mod.rs
Archiving src/tests/helpers/query_helpers.rs
Archiving src/tests/helpers/random.rs
Archiving src/tests/helpers/scope_sequence.rs
Archiving src/tests/highlight_test.rs
Archiving src/tests/language_test.rs
Archiving src/tests/mod.rs
Archiving src/tests/node_test.rs
Archiving src/tests/parser_hang_test.rs
Archiving src/tests/parser_test.rs
Archiving src/tests/pathological_test.rs
Archiving src/tests/query_test.rs
Archiving src/tests/tags_test.rs
Archiving src/tests/test_highlight_test.rs
Archiving src/tests/test_tags_test.rs
Archiving src/tests/text_provider_test.rs
Archiving src/tests/tree_test.rs
Archiving src/tests/wasm_language_test.rs
Archiving src/util.rs
Archiving src/wasm.rs
Archiving vendor/xterm-colors.json
Packaged 107 files, 7.7MiB (2.4MiB compressed)
We can see that cargo itself is not including .editorconfig in the
crate.
When I run a similar command (although including --list) from the
git clone, the .editorconfig file _is_ included.
It turns out this is intended behavior in cargo[1]
> If include is not specified, then the following files will be excluded:
>
> * If the package is not in a git repository, all “hidden” files starting
> with a dot will be skipped.
> * If the package is in a git repository, any files that are ignored by the
> gitignore rules of the repository and global git configuration will be
> skipped.
[1]:
https://doc.rust-lang.org/cargo/reference/manifest.html#the-exclude-and-include-fields
This is certainly a bit of a foot-gun in the Debian packaging realm,
since we either need to
a) adjust the Rust-specific tooling to know which behavior to replicate
b) convince upstreams to add include rules if they have hidden files
that should be part of the crate
c) manually patch any crates that are affected by this behavior to use
explicit include rules
For now, I'll do c) to handle this.
Cheers,
--
James
GPG Key: 4096R/91BF BF4D 6956 BD5D F7B7 2D23 DFE6 91AE 331B A3DB