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

Reply via email to