deref symlink on quartz sync
This commit is contained in:
		
							parent
							
								
									0998bc355e
								
							
						
					
					
						commit
						a7cca3242a
					
				
					 2 changed files with 28 additions and 14 deletions
				
			
		| 
						 | 
					@ -1,12 +1,6 @@
 | 
				
			||||||
---
 | 
					---
 | 
				
			||||||
draft: true
 | 
					draft: true
 | 
				
			||||||
---
 | 
					---
 | 
				
			||||||
 | 
					 | 
				
			||||||
## todo
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- dereference symlink for npx quartz sync
 | 
					 | 
				
			||||||
  - prompt user as to whether to do it (it's expensive for large vaults)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## high priority backlog
 | 
					## high priority backlog
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- block links: https://help.obsidian.md/Linking+notes+and+files/Internal+links#Link+to+a+block+in+a+note
 | 
					- block links: https://help.obsidian.md/Linking+notes+and+files/Internal+links#Link+to+a+block+in+a+note
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -112,6 +112,7 @@ function exitIfCancel(val) {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
async function stashContentFolder(contentFolder) {
 | 
					async function stashContentFolder(contentFolder) {
 | 
				
			||||||
 | 
					  await fs.promises.rm(contentCacheFolder, { force: true, recursive: true })
 | 
				
			||||||
  await fs.promises.cp(contentFolder, contentCacheFolder, {
 | 
					  await fs.promises.cp(contentFolder, contentCacheFolder, {
 | 
				
			||||||
    force: true,
 | 
					    force: true,
 | 
				
			||||||
    recursive: true,
 | 
					    recursive: true,
 | 
				
			||||||
| 
						 | 
					@ -150,7 +151,7 @@ yargs(hideBin(process.argv))
 | 
				
			||||||
        message: `Choose how to initialize the content in \`${contentFolder}\``,
 | 
					        message: `Choose how to initialize the content in \`${contentFolder}\``,
 | 
				
			||||||
        options: [
 | 
					        options: [
 | 
				
			||||||
          { value: "new", label: "Empty Quartz" },
 | 
					          { value: "new", label: "Empty Quartz" },
 | 
				
			||||||
          { value: "copy", label: "Replace with an existing folder", hint: "overwrites `content`" },
 | 
					          { value: "copy", label: "Copy an existing folder", hint: "overwrites `content`" },
 | 
				
			||||||
          {
 | 
					          {
 | 
				
			||||||
            value: "symlink",
 | 
					            value: "symlink",
 | 
				
			||||||
            label: "Symlink an existing folder",
 | 
					            label: "Symlink an existing folder",
 | 
				
			||||||
| 
						 | 
					@ -163,12 +164,10 @@ yargs(hideBin(process.argv))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    async function rmContentFolder() {
 | 
					    async function rmContentFolder() {
 | 
				
			||||||
      const contentStat = await fs.promises.lstat(contentFolder)
 | 
					      const contentStat = await fs.promises.lstat(contentFolder)
 | 
				
			||||||
      if (contentStat) {
 | 
					      if (contentStat.isSymbolicLink()) {
 | 
				
			||||||
        if (contentStat.isSymbolicLink()) {
 | 
					        await fs.promises.unlink(contentFolder)
 | 
				
			||||||
          await fs.promises.unlink(contentFolder)
 | 
					      } else {
 | 
				
			||||||
        } else {
 | 
					        await rimraf(contentFolder)
 | 
				
			||||||
          await rimraf(contentFolder)
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -274,11 +273,32 @@ See the [documentation](https://quartz.jzhao.xyz) for how to get started.
 | 
				
			||||||
    console.log("Backing up your content")
 | 
					    console.log("Backing up your content")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (argv.commit) {
 | 
					    if (argv.commit) {
 | 
				
			||||||
 | 
					      const contentStat = await fs.promises.lstat(contentFolder)
 | 
				
			||||||
 | 
					      if (contentStat.isSymbolicLink()) {
 | 
				
			||||||
 | 
					        console.log(chalk.yellow("Detected symlink, trying to dereference before committing"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // stash symlink file
 | 
				
			||||||
 | 
					        await stashContentFolder(contentFolder)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // follow symlink and copy content
 | 
				
			||||||
 | 
					        const linkTarg = await fs.promises.readlink(contentFolder)
 | 
				
			||||||
 | 
					        await fs.promises.cp(linkTarg, contentFolder, {
 | 
				
			||||||
 | 
					          force: true,
 | 
				
			||||||
 | 
					          recursive: true,
 | 
				
			||||||
 | 
					          preserveTimestamps: true,
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      const currentTimestamp = new Date().toLocaleString("en-US", {
 | 
					      const currentTimestamp = new Date().toLocaleString("en-US", {
 | 
				
			||||||
        dateStyle: "medium",
 | 
					        dateStyle: "medium",
 | 
				
			||||||
        timeStyle: "short",
 | 
					        timeStyle: "short",
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
      spawnSync("git", ["commit", "-am", `Quartz sync: ${currentTimestamp}`], { stdio: "inherit" })
 | 
					      spawnSync("git", ["commit", "-am", `Quartz sync: ${currentTimestamp}`], { stdio: "inherit" })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if (contentStat.isSymbolicLink()) {
 | 
				
			||||||
 | 
					        // put symlink back
 | 
				
			||||||
 | 
					        await popContentFolder()
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    await stashContentFolder(contentFolder)
 | 
					    await stashContentFolder(contentFolder)
 | 
				
			||||||
| 
						 | 
					@ -466,7 +486,7 @@ See the [documentation](https://quartz.jzhao.xyz) for how to get started.
 | 
				
			||||||
          rebuild(clientRefresh)
 | 
					          rebuild(clientRefresh)
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      await build(() => {})
 | 
					      await build(() => { })
 | 
				
			||||||
      ctx.dispose()
 | 
					      ctx.dispose()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue