Previously a Git repository was initialized if a Cargo workspace was
detected. However, it's also possible for users to initialize rustlings
in an existing Git repository that doesn't contain a Cargo workspace. In
that case, it's still undesirable to initialize a nested Git repository
for rustlings. We therefore search all ancestors of the current working
directory for `.git` or `.jj` directories to determine if rustlings is
being initialized in an existing Git repository.
Some cargo workspaces may contain windows line endings. Even if the
file is stored in a repo with unix line endings, users may have some
setting activated that automatically translates them to windows line
endings when working locally.
- Detect if we are in a cargo project more reliably.
(e.g. if `rustlings init` is run in the `src/` directory)
- Refuse to initialize rustlings in a non-workspace cargo project.
- Automatically populate the `workspace.members` field if `rustlings init` is
run in a workspace.
This may be considered risky, as there is no guarantee that's what the user
wanted to do. However, it is consistent with the behavior of `cargo new`.
Also, newcomers to Rust are unlikely to accidentally be in a cargo workspace,
as they won't know how to create one in the first place.
The use case for initialization in a workspace is when a workshop organizer
wants to use rustlings alongside other exerices and provide a single
repository with everything in one place.