-
Notifications
You must be signed in to change notification settings - Fork 2.7k
Implement cargo init
#2081
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Implement cargo init
#2081
Conversation
|
Thanks for the pull request, and welcome! The Rust team is excited to review your changes, and you should hear from @wycats (or someone else) soon. If any changes to this PR are deemed necessary, please add them as extra commits. This ensures that the reviewer can see what has changed since they last reviewed the code. The way Github handles out-of-date commits, this should also make it reasonably obvious what issues have or haven't been addressed. Large or tricky changes may require several passes of review and changes. Please see the contribution instructions for more information. |
|
Assignee for my previous attempt was @alexcrichton, but I don't know how to specify assignee when doing pull request here. Update: found: |
|
Nice work @vi! I'll see if I can get around to reviewing this tomorrow |
src/bin/init.rs
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Perhaps this could take an optional argument of a directory to initialize as well?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not sure how do I make optional positional arguments here. Naive attempt failed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ah I think it's possible with [<optional-arg>]
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Found out: the main thing that it's a special library (Docopt) is in use and the usage string matters.
|
Shall I try to improve things according to line comments or there needs to be major redesign of the feature? |
|
Nah I think this is definitely along the right lines, so feel free to make changes in this PR! |
|
How should the {both Ideally Cargo should create a project file with both Is support of bin+lib project in |
|
To me it just seemed a little odd to explicitly deny as it's relatively common. It may require some tweaks of how the implementation goes, but in theory it shouldn't be too onerous I think. |
|
Implemented updated
|
src/cargo/util/paths.rs
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This indentation seems a bit off, the OpenOptions should come right after the ( of the try!(
|
(sorry it's being a bit slow...) |
|
Thanks for being patient @vi! I talked with @wycats today and we're both quite comfortable moving forward with this. The only lingering thing we thought of is could you tweak the error message for when |
|
Done + rebased yet again. |
|
⌛ Testing commit 5e62d85 with merge cc192a3... |
|
💔 Test failed - cargo-linux-64 |
|
This test differs from I can reproduce the failure with but not with What shall be fixed? Testing tool or Update: I see tests do something with |
When non-existing directory is provided as argument, it
works just like "cargo new".
When existing directory is used, it may also create template
source file like "cargo new" or may find and use existing
source code for Cargo.toml.
Squashed commit of the following:
cargo init: Supply USER envvar for one test
cargo init: Other message when Cargo.toml already exists
cargo init: Resolve conflict after with rust-lang#2257
fix minor issues
cargo new/init: Simplify error handling code in entry points
cargo new/init: Better message for invalid characters in name
cargo init: fix minor issues in test
cargo init: Avoid excessive builds in the test
cargo init: minor fixes
cargo init: Skip no_filename test on Windows
cargo init: Implement better error message for bin name clash
cargo init: minor fixes
cargo init: handle "/" path
cargo init: Actualise
cargo new: Fix upper case error message in test
cargo init: Remove paths::{file,directory}_already_exists
fix uppper-case error messages
cargo init: Fix minor issues per diff comments
cargo init: Change binary handling
cargo init: Move multiple lib error detection away from mk
cargo init: Support optional path argument
cargo init: Fix minor issues per Github comments
cargo init: Fix complaint from tests/check-style.sh
cargo init: Handle projects with multiple mains
cargo init: Major refactor, multi-target projects
cargo init: Add Cargo.lock unconditionally
cargo init: Fix complains from tests/check-style.sh
cargo init: Tests for handling VCS
cargo init: Handle VCS
cargo init: work in progress
cargo init: Deduplicate some things between new and init
cargo init: Auto-detection of --bin
cargo init: work in progress...
cargo init: Fix tests and allow explicit --vcs
cargo init: intermediate refactor
cargo init: First sketch of implementation
cargo init: Preliminary test
cargo init: first stub
See
https://github.com/vi/cargo/tree/cargo_init_unsquashed
for individual commits
|
Fixed the test to have |
Implement `cargo init` command and appropriate tests ( #21). Features: * Working like `cargo new` if there are no files in current directory * Auto-detection of `--bin` * Auto-detection of already existing VSC and appending to respecive ignore file * Appending of appropriate `[lib]` or `[[bin]]` section to `Cargo.toml` in case of some non-standard source locations Concerns: * I'm not experienced in Rust + lazy => code looks poorer compared to the rest Cargo code * The test don't cover 100% of functions * Project consisting of both binary and library is not handled * Many deviations from [previously proposed algorithm](#2008 (comment))
|
☀️ Test successful - cargo-linux-32, cargo-linux-64, cargo-mac-32, cargo-mac-64, cargo-win-gnu-32, cargo-win-gnu-64, cargo-win-msvc-32, cargo-win-msvc-64 |
|
Any reason why |
|
@WiSaGaN Because |
|
It should be in the ignore for libraries, but not for binaries. On Feb 17, 2016, 09:29 -0500, [email protected], wrote:
|
|
Is there any reason to include Better extra entry in gitignore than missing entry. Project may be recrafted into a library after creation... |
|
Yes, for repeatable builds. There's a FAQ entry about this distinction. On Feb 17, 2016, 09:59 -0500, Vitaly [email protected], wrote:
|
|
Shall I implement again bin/lib distinction for ignore file generation? Shall the lock file be checked into Git automatically by cargo new/init (in addition to not being added to gitignore) for bin projects? |
|
@vi , yes, please. |
|
It's not that simple. Restored the function in a proper way: #2390 |
|
I remember wondering about whether the condition around adding |
Implement
cargo initcommand and appropriate tests ( #21).Features:
cargo newif there are no files in current directory--bin[lib]or[[bin]]section toCargo.tomlin case of some non-standard source locationsConcerns: