mirror of
				https://github.com/astral-sh/uv.git
				synced 2025-10-31 12:06:13 +00:00 
			
		
		
		
	Fix uv init a sub-package by path (#5247)
				
					
				
			## Summary
Resolves #5242
## Test Plan
See the [CI
failure](2769863030)
for the new failing test.
			
			
This commit is contained in:
		
							parent
							
								
									0611c7b59e
								
							
						
					
					
						commit
						48921f9455
					
				
					 2 changed files with 98 additions and 1 deletions
				
			
		|  | @ -3,7 +3,6 @@ use std::path::PathBuf; | ||||||
| 
 | 
 | ||||||
| use anyhow::Result; | use anyhow::Result; | ||||||
| use owo_colors::OwoColorize; | use owo_colors::OwoColorize; | ||||||
| 
 |  | ||||||
| use pep508_rs::PackageName; | use pep508_rs::PackageName; | ||||||
| use uv_configuration::PreviewMode; | use uv_configuration::PreviewMode; | ||||||
| use uv_fs::Simplified; | use uv_fs::Simplified; | ||||||
|  | @ -70,6 +69,9 @@ pub(crate) async fn init( | ||||||
|     let src_dir = path.join("src").join(name.as_ref()); |     let src_dir = path.join("src").join(name.as_ref()); | ||||||
|     fs_err::create_dir_all(&src_dir)?; |     fs_err::create_dir_all(&src_dir)?; | ||||||
| 
 | 
 | ||||||
|  |     // Canonicalize the path to the project.
 | ||||||
|  |     let path = path.canonicalize()?; | ||||||
|  | 
 | ||||||
|     // Create the `pyproject.toml`.
 |     // Create the `pyproject.toml`.
 | ||||||
|     let pyproject = indoc::formatdoc! {r#" |     let pyproject = indoc::formatdoc! {r#" | ||||||
|         [project] |         [project] | ||||||
|  |  | ||||||
|  | @ -269,3 +269,98 @@ fn init_workspace() -> Result<()> { | ||||||
| 
 | 
 | ||||||
|     Ok(()) |     Ok(()) | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | #[test] | ||||||
|  | fn init_workspace_relative_sub_package() -> Result<()> { | ||||||
|  |     let context = TestContext::new("3.12"); | ||||||
|  | 
 | ||||||
|  |     let pyproject_toml = context.temp_dir.child("pyproject.toml"); | ||||||
|  |     pyproject_toml.write_str(indoc! { | ||||||
|  |         r#" | ||||||
|  |         [project] | ||||||
|  |         name = "project" | ||||||
|  |         version = "0.1.0" | ||||||
|  |         requires-python = ">=3.12" | ||||||
|  |         dependencies = ["anyio==3.7.0"] | ||||||
|  |         "#,
 | ||||||
|  |     })?; | ||||||
|  | 
 | ||||||
|  |     let child = context.temp_dir.join("foo"); | ||||||
|  |     fs_err::create_dir(&child)?; | ||||||
|  | 
 | ||||||
|  |     uv_snapshot!(context.filters(), context.init().current_dir(&context.temp_dir).arg("foo"), @r###" | ||||||
|  |     success: true | ||||||
|  |     exit_code: 0 | ||||||
|  |     ----- stdout ----- | ||||||
|  | 
 | ||||||
|  |     ----- stderr ----- | ||||||
|  |     warning: `uv init` is experimental and may change without warning | ||||||
|  |     Adding foo as member of workspace [TEMP_DIR]/ | ||||||
|  |     Initialized project foo in [TEMP_DIR]/foo | ||||||
|  |     "###);
 | ||||||
|  | 
 | ||||||
|  |     let pyproject = fs_err::read_to_string(child.join("pyproject.toml"))?; | ||||||
|  |     let init_py = fs_err::read_to_string(child.join("src/foo/__init__.py"))?; | ||||||
|  | 
 | ||||||
|  |     let _ = fs_err::read_to_string(child.join("README.md")).unwrap(); | ||||||
|  | 
 | ||||||
|  |     insta::with_settings!({ | ||||||
|  |         filters => context.filters(), | ||||||
|  |     }, { | ||||||
|  |         assert_snapshot!( | ||||||
|  |             pyproject, @r###" | ||||||
|  |         [project] | ||||||
|  |         name = "foo" | ||||||
|  |         version = "0.1.0" | ||||||
|  |         description = "Add your description here" | ||||||
|  |         readme = "README.md" | ||||||
|  |         dependencies = [] | ||||||
|  | 
 | ||||||
|  |         [tool.uv] | ||||||
|  |         dev-dependencies = [] | ||||||
|  |         "###
 | ||||||
|  |         ); | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     insta::with_settings!({ | ||||||
|  |         filters => context.filters(), | ||||||
|  |     }, { | ||||||
|  |         assert_snapshot!( | ||||||
|  |             init_py, @r###" | ||||||
|  |         def hello() -> str: | ||||||
|  |             return "Hello from foo!" | ||||||
|  |         "###
 | ||||||
|  |         ); | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     let workspace = fs_err::read_to_string(context.temp_dir.join("pyproject.toml"))?; | ||||||
|  |     insta::with_settings!({ | ||||||
|  |         filters => context.filters(), | ||||||
|  |     }, { | ||||||
|  |         assert_snapshot!( | ||||||
|  |             workspace, @r###" | ||||||
|  |         [project] | ||||||
|  |         name = "project" | ||||||
|  |         version = "0.1.0" | ||||||
|  |         requires-python = ">=3.12" | ||||||
|  |         dependencies = ["anyio==3.7.0"] | ||||||
|  | 
 | ||||||
|  |         [tool.uv.workspace] | ||||||
|  |         members = ["foo"] | ||||||
|  |         "###
 | ||||||
|  |         ); | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     // Run `uv lock` in the workspace.
 | ||||||
|  |     uv_snapshot!(context.filters(), context.lock(), @r###" | ||||||
|  |     success: true | ||||||
|  |     exit_code: 0 | ||||||
|  |     ----- stdout ----- | ||||||
|  | 
 | ||||||
|  |     ----- stderr ----- | ||||||
|  |     warning: `uv lock` is experimental and may change without warning | ||||||
|  |     Resolved 5 packages in [TIME] | ||||||
|  |     "###);
 | ||||||
|  | 
 | ||||||
|  |     Ok(()) | ||||||
|  | } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Jo
						Jo