Skip to content

Commit 901e1ea

Browse files
authored
Merge pull request #8065 from gitbutlerapp/add-project-with-user-details
On project add set git name and git email if not present
2 parents ad628f6 + 56945f3 commit 901e1ea

File tree

11 files changed

+55
-25
lines changed

11 files changed

+55
-25
lines changed

crates/gitbutler-branch-actions/tests/virtual_branches/init.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ fn twice() {
99

1010
{
1111
let project = projects
12-
.add(test_project.path())
12+
.add(test_project.path(), None, None)
1313
.expect("failed to add project");
1414
let ctx = CommandContext::open(&project, AppSettings::default()).unwrap();
1515

@@ -27,7 +27,7 @@ fn twice() {
2727
}
2828

2929
{
30-
let project = projects.add(test_project.path()).unwrap();
30+
let project = projects.add(test_project.path(), None, None).unwrap();
3131
let ctx = CommandContext::open(&project, AppSettings::default()).unwrap();
3232
gitbutler_branch_actions::set_base_branch(
3333
&ctx,

crates/gitbutler-branch-actions/tests/virtual_branches/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ impl Default for Test {
3434

3535
let test_project = TestProject::default();
3636
let project = projects
37-
.add(test_project.path())
37+
.add(test_project.path(), None, None)
3838
.expect("failed to add project");
3939
let ctx = CommandContext::open(&project, AppSettings::default()).unwrap();
4040

crates/gitbutler-cli/src/command/project.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ pub fn add(
3030
.context("Only non-bare repositories can be added")?
3131
.to_owned()
3232
.canonicalize()?;
33-
let project = ctrl.add(path)?;
33+
let project = ctrl.add(path, None, None)?;
3434
let ctx = CommandContext::open(&project, AppSettings::default())?;
3535
if let Some(refname) = refname {
3636
gitbutler_branch_actions::set_base_branch(&ctx, &refname)?;

crates/gitbutler-project/src/controller.rs

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,12 @@ impl Controller {
2121
}
2222
}
2323

24-
pub fn add<P: AsRef<Path>>(&self, path: P) -> Result<Project> {
24+
pub fn add<P: AsRef<Path>>(
25+
&self,
26+
path: P,
27+
name: Option<String>,
28+
email: Option<String>,
29+
) -> Result<Project> {
2530
let path = path.as_ref();
2631
let all_projects = self
2732
.projects_storage
@@ -86,6 +91,21 @@ impl Controller {
8691
tracing::error!(project_id = %project.id, ?error, "failed to create {:?} on project add", project.gb_dir());
8792
}
8893

94+
let repo = git2::Repository::open(&project.path)?;
95+
let config = repo.config()?;
96+
97+
let name_key = "user.name";
98+
if config.get_entry(name_key).map_or(true, |e| !e.has_value()) {
99+
let mut local = config.open_level(git2::ConfigLevel::Local)?;
100+
local.set_str(name_key, &name.unwrap_or("Firstname Lastname".to_string()))?;
101+
}
102+
103+
let email_key = "user.email";
104+
if config.get_entry(email_key).map_or(true, |e| !e.has_value()) {
105+
let mut local = config.open_level(git2::ConfigLevel::Local)?;
106+
local.set_str(email_key, &email.unwrap_or("[email protected]".to_string()))?;
107+
}
108+
89109
Ok(project)
90110
}
91111

crates/gitbutler-project/tests/projects/main.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ mod add {
1616
let (controller, _tmp) = new();
1717
let repository = gitbutler_testsupport::TestProject::default();
1818
let path = repository.path();
19-
let project = controller.add(path).unwrap();
19+
let project = controller.add(path, None, None).unwrap();
2020
assert_eq!(project.path, path);
2121
assert_eq!(
2222
project.title,
@@ -32,7 +32,7 @@ mod add {
3232
fn non_bare_without_worktree() {
3333
let (controller, _tmp) = new();
3434
let root = repo_path_at("non-bare-without-worktree");
35-
let err = controller.add(root).unwrap_err();
35+
let err = controller.add(root, None, None).unwrap_err();
3636
assert_eq!(
3737
err.to_string(),
3838
"Cannot add non-bare repositories without a workdir"
@@ -43,7 +43,7 @@ mod add {
4343
fn submodule() {
4444
let (controller, _tmp) = new();
4545
let root = repo_path_at("with-submodule").join("submodule");
46-
let err = controller.add(root).unwrap_err();
46+
let err = controller.add(root, None, None).unwrap_err();
4747
assert_eq!(
4848
err.to_string(),
4949
"A git-repository without a `.git` directory cannot currently be added"
@@ -56,7 +56,7 @@ mod add {
5656
let tmp = tempfile::tempdir().unwrap();
5757
assert_eq!(
5858
controller
59-
.add(tmp.path().join("missing"))
59+
.add(tmp.path().join("missing"), None, None)
6060
.unwrap_err()
6161
.to_string(),
6262
"path not found"
@@ -70,7 +70,7 @@ mod add {
7070
let path = tmp.path();
7171
std::fs::write(path.join("file.txt"), "hello world").unwrap();
7272
assert_eq!(
73-
controller.add(path).unwrap_err().to_string(),
73+
controller.add(path, None, None).unwrap_err().to_string(),
7474
"must be a Git repository"
7575
);
7676
}
@@ -79,7 +79,7 @@ mod add {
7979
fn empty() {
8080
let (controller, _tmp) = new();
8181
let tmp = tempfile::tempdir().unwrap();
82-
let err = controller.add(tmp.path()).unwrap_err();
82+
let err = controller.add(tmp.path(), None, None).unwrap_err();
8383
assert_eq!(err.to_string(), "must be a Git repository");
8484
}
8585

@@ -88,9 +88,9 @@ mod add {
8888
let (controller, _tmp) = new();
8989
let repository = gitbutler_testsupport::TestProject::default();
9090
let path = repository.path();
91-
controller.add(path).unwrap();
91+
controller.add(path, None, None).unwrap();
9292
assert_eq!(
93-
controller.add(path).unwrap_err().to_string(),
93+
controller.add(path, None, None).unwrap_err().to_string(),
9494
"project already exists"
9595
);
9696
}
@@ -104,7 +104,7 @@ mod add {
104104
let repo = git2::Repository::init_bare(&repo_dir).unwrap();
105105
create_initial_commit(&repo);
106106

107-
let err = controller.add(repo_dir).unwrap_err();
107+
let err = controller.add(repo_dir, None, None).unwrap_err();
108108
assert_eq!(err.to_string(), "bare repositories are unsupported");
109109
}
110110

@@ -119,7 +119,7 @@ mod add {
119119
create_initial_commit(&repo);
120120

121121
let worktree = repo.worktree("feature", &worktree_dir, None).unwrap();
122-
let err = controller.add(worktree.path()).unwrap_err();
122+
let err = controller.add(worktree.path(), None, None).unwrap_err();
123123
assert_eq!(err.to_string(), "can only work in main worktrees");
124124
}
125125

@@ -157,7 +157,7 @@ mod delete {
157157
let (controller, _tmp) = new();
158158
let repository = gitbutler_testsupport::TestProject::default();
159159
let path = repository.path();
160-
let project = controller.add(path).unwrap();
160+
let project = controller.add(path, None, None).unwrap();
161161
assert!(controller.delete(project.id).is_ok());
162162
assert!(controller.delete(project.id).is_ok()); // idempotent
163163
assert!(controller.get(project.id).is_err());

crates/gitbutler-stack/src/stack.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -368,8 +368,10 @@ impl Stack {
368368
self.name.clone()
369369
} else if let Some(refname) = self.upstream.as_ref() {
370370
refname.branch().to_string()
371+
} else if let Ok((author, _committer)) = ctx.repo().signatures() {
372+
generate_branch_name(author)?
371373
} else {
372-
let (author, _committer) = ctx.repo().signatures()?;
374+
let author = git2::Signature::now("Firstname Lastname", "[email protected]")?;
373375
generate_branch_name(author)?
374376
};
375377

crates/gitbutler-tauri/src/projects.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,16 @@ pub mod commands {
2121
}
2222

2323
#[tauri::command(async)]
24-
#[instrument(skip(projects), err(Debug))]
24+
#[instrument(skip(projects, users), err(Debug))]
2525
pub fn add_project(
2626
projects: State<'_, Controller>,
27+
users: State<'_, gitbutler_user::Controller>,
2728
path: &path::Path,
2829
) -> Result<projects::Project, Error> {
29-
Ok(projects.add(path)?)
30+
let user = users.get_user()?;
31+
let name = user.as_ref().and_then(|u| u.name.clone());
32+
let email = user.as_ref().and_then(|u| u.email.clone());
33+
Ok(projects.add(path, name, email)?)
3034
}
3135

3236
#[tauri::command(async)]

crates/gitbutler-testsupport/src/lib.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,11 @@ pub mod read_only {
201201
// Assure the project is valid the first time.
202202
let project = if was_inserted {
203203
let tmp = tempfile::TempDir::new()?;
204-
gitbutler_project::Controller::from_path(tmp.path()).add(project_worktree_dir)?
204+
gitbutler_project::Controller::from_path(tmp.path()).add(
205+
project_worktree_dir,
206+
None,
207+
None,
208+
)?
205209
} else {
206210
Project {
207211
id: ProjectId::generate(),

crates/gitbutler-testsupport/src/suite.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ impl Suite {
7272

7373
(
7474
self.projects
75-
.add(repository.path().parent().unwrap())
75+
.add(repository.path().parent().unwrap(), None, None)
7676
.expect("failed to add project"),
7777
tmp,
7878
)

crates/gitbutler-workspace/tests/branch_trees.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ mod compute_updated_branch_head {
4444
let data_dir = gitbutler_testsupport::paths::data_dir();
4545
let projects = gitbutler_project::Controller::from_path(data_dir.path());
4646
let project = projects
47-
.add(test_repository.repository.path())
47+
.add(test_repository.repository.path(), None, None)
4848
.expect("failed to add project");
4949
let ctx = CommandContext::open(&project, but_settings::AppSettings::default()).unwrap();
5050
set_test_target(&ctx).unwrap();
@@ -77,7 +77,7 @@ mod compute_updated_branch_head {
7777
let data_dir = gitbutler_testsupport::paths::data_dir();
7878
let projects = gitbutler_project::Controller::from_path(data_dir.path());
7979
let project = projects
80-
.add(test_repository.repository.path())
80+
.add(test_repository.repository.path(), None, None)
8181
.expect("failed to add project");
8282
let ctx = CommandContext::open(&project, but_settings::AppSettings::default()).unwrap();
8383
set_test_target(&ctx).unwrap();
@@ -115,7 +115,7 @@ mod compute_updated_branch_head {
115115
let data_dir = gitbutler_testsupport::paths::data_dir();
116116
let projects = gitbutler_project::Controller::from_path(data_dir.path());
117117
let project = projects
118-
.add(test_repository.repository.path())
118+
.add(test_repository.repository.path(), None, None)
119119
.expect("failed to add project");
120120
let ctx = CommandContext::open(&project, but_settings::AppSettings::default()).unwrap();
121121
set_test_target(&ctx).unwrap();

crates/gitbutler-workspace/tests/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ mod checkout_branch_trees {
2222
let projects = gitbutler_project::Controller::from_path(data_dir.path());
2323

2424
let project = projects
25-
.add(test_project.path())
25+
.add(test_project.path(), None, None)
2626
.expect("failed to add project");
2727

2828
let ctx = CommandContext::open(&project, AppSettings::default()).unwrap();

0 commit comments

Comments
 (0)