diff --git a/nostr/commit-signatures.jsonl b/nostr/commit-signatures.jsonl index f39d98d..d1b5452 100644 --- a/nostr/commit-signatures.jsonl +++ b/nostr/commit-signatures.jsonl @@ -112,3 +112,4 @@ {"kind":1640,"pubkey":"573634b648634cbad10f2451776089ea21090d9407f715e83c577b4611ae6edc","created_at":1772193104,"tags":[["author","Silberengel","silberengel7@protonmail.com"],["message","bug-fixes"]],"content":"Signed commit: bug-fixes","id":"02dcdcda1083cffd91dbf8906716c2ae09f06f77ef8590802afecd85f0b3108a","sig":"13d2b30ed37af03fd47dc09536058babb4dc63d1cfc55b8f38651ffd6342abcddc840b543c085b047721e9102b2d07e3dae78ff31d5990c92c04410ef1efcd5b"} {"kind":1640,"pubkey":"573634b648634cbad10f2451776089ea21090d9407f715e83c577b4611ae6edc","created_at":1772220851,"tags":[["author","Silberengel","silberengel7@protonmail.com"],["message","bug-fixes"]],"content":"Signed commit: bug-fixes","id":"d98d2d6a6eb27ba36f19015f7d6969fe3925c40b23187d70ccc9b61141c6b4b7","sig":"8727e3015e38a78d7a6105c26e5b1469dc4d6d701e58d5d6c522ab529b4daa2d39d4353eb6d091f3c1fd28ad0289eae808494c9e2722bf9065dd2b2e9001664f"} {"kind":1640,"pubkey":"573634b648634cbad10f2451776089ea21090d9407f715e83c577b4611ae6edc","created_at":1772223624,"tags":[["author","Silberengel","silberengel7@protonmail.com"],["message","bug-fixes"]],"content":"Signed commit: bug-fixes","id":"99cb543f1e821f1b7df4bbde2b3da3ab3a09cda7a1e9a537fe1b8df79b19e8e8","sig":"762a7ea92457ce81cc5aae9bc644fb9d80f90c7500035fbb506f2f76a5942333b828cc8a59f7656b0e714b15a59158be0a671f51476be2e8eabe9731ced74bcb"} +{"kind":1640,"pubkey":"573634b648634cbad10f2451776089ea21090d9407f715e83c577b4611ae6edc","created_at":1772226191,"tags":[["author","Silberengel","silberengel7@protonmail.com"],["message","bug-fixes"]],"content":"Signed commit: bug-fixes","id":"20be97351d2b05fa7ad9e161b2619e9babaaffc6a8090057c1a3ac50a0f08d6a","sig":"a174c7dd39f613dd88260ef5c111b943df381b0acae20d048596e11ef1a6b0e3c1bfb9a8858af3df0f8858c4c79d1e2d03ad248a0608ac5d5cded6a81e99af77"} diff --git a/src/lib/services/git/file-manager.ts b/src/lib/services/git/file-manager.ts index d2d8ca2..d2c66c6 100644 --- a/src/lib/services/git/file-manager.ts +++ b/src/lib/services/git/file-manager.ts @@ -388,6 +388,33 @@ export class FileManager { // For empty repos, we need to create an empty commit first, then create the branch // This is the only way git will recognize the branch try { + // Fetch user profile to get author name and email + let authorName = 'GitRepublic User'; + let authorEmail = 'gitrepublic@gitrepublic.web'; + try { + const { requireNpubHex } = await import('$lib/utils/npub-utils.js'); + const { fetchUserProfile, extractProfileData, getUserName, getUserEmail } = await import('$lib/utils/user-profile.js'); + const { DEFAULT_NOSTR_RELAYS } = await import('$lib/config.js'); + const userPubkeyHex = requireNpubHex(npub); + const profileEvent = await fetchUserProfile(userPubkeyHex, DEFAULT_NOSTR_RELAYS); + const profile = extractProfileData(profileEvent); + authorName = getUserName(profile, userPubkeyHex, npub); + authorEmail = getUserEmail(profile, userPubkeyHex, npub); + logger.info({ npub, repoName, authorName, authorEmail }, '[FileManager.createBranch] Fetched user profile for author identity'); + } catch (profileError) { + logger.warn({ npub, repoName, error: profileError }, '[FileManager.createBranch] Failed to fetch user profile, using defaults'); + } + + // Set git config for user.name and user.email in this repository + // This is required for commit-tree to work without errors + try { + await git.addConfig('user.name', authorName, false, 'local'); + await git.addConfig('user.email', authorEmail, false, 'local'); + logger.info({ npub, repoName, authorName, authorEmail }, '[FileManager.createBranch] Set git config for user.name and user.email'); + } catch (configError) { + logger.warn({ npub, repoName, error: configError }, '[FileManager.createBranch] Failed to set git config, will use --author flag'); + } + logger.info({ npub, repoName, branchName, repoPath }, '[FileManager.createBranch] Step 1: Creating empty tree for initial commit'); // Create empty tree object - empty tree hash is always the same: 4b825dc642cb6eb9a060e54bf8d69288fbee4904 // We'll use mktree to create it if needed @@ -417,8 +444,10 @@ export class FileManager { logger.info({ npub, repoName, branchName, emptyTreeHash }, '[FileManager.createBranch] Step 1 complete: empty tree ready'); logger.info({ npub, repoName, branchName }, '[FileManager.createBranch] Step 2: Creating empty commit'); - // Create an empty commit pointing to the empty tree - const commitHash = await git.raw(['commit-tree', '-m', `Initial commit on ${branchName}`, emptyTreeHash]); + // Create an empty commit pointing to the empty tree with author information + // Use --author flag to specify author identity (required when git config is not set) + const authorString = `${authorName} <${authorEmail}>`; + const commitHash = await git.raw(['commit-tree', '-m', `Initial commit on ${branchName}`, '--author', authorString, emptyTreeHash]); const commit = commitHash.trim(); logger.info({ npub, repoName, branchName, commit }, '[FileManager.createBranch] Step 2 complete: empty commit created');