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