{"format":1,"manifest":{"name":"git-quick","publisher":"vyloxi","version":"1.2.0","displayName":"Git Quick Actions","description":"Status, pull, push, commit, branch, stash, log and blame as commands. Everything runs visibly in the terminal.","engines":{"ferrum":"^0.1.1"},"categories":["Git"],"icon":"icon.png","repository":"https://github.com/voukengdongmofrankysteve/ferrum-market","license":"MIT","main":"extension.js","activationEvents":["onView:gitQuick.actions","onCommand:gitQuick.status","onCommand:gitQuick.pull","onCommand:gitQuick.push","onCommand:gitQuick.fetch","onCommand:gitQuick.commit","onCommand:gitQuick.commitAll","onCommand:gitQuick.amend","onCommand:gitQuick.undoCommit","onCommand:gitQuick.newBranch","onCommand:gitQuick.switchBranch","onCommand:gitQuick.branches","onCommand:gitQuick.stash","onCommand:gitQuick.stashPop","onCommand:gitQuick.log","onCommand:gitQuick.diff","onCommand:gitQuick.diffStaged","onCommand:gitQuick.discardUnstaged","onCommand:gitQuick.tag","onCommand:gitQuick.tags","onCommand:gitQuick.remotes","onCommand:gitQuick.fileHistory","onCommand:gitQuick.blameFile"],"permissions":["terminal"],"contributes":{"commands":[{"command":"gitQuick.status","title":"Status","category":"Git Quick Actions"},{"command":"gitQuick.pull","title":"Pull","category":"Git Quick Actions"},{"command":"gitQuick.push","title":"Push","category":"Git Quick Actions"},{"command":"gitQuick.fetch","title":"Fetch All","category":"Git Quick Actions"},{"command":"gitQuick.commit","title":"Commit Staged...","category":"Git Quick Actions"},{"command":"gitQuick.commitAll","title":"Stage All and Commit...","category":"Git Quick Actions"},{"command":"gitQuick.amend","title":"Amend Last Commit","category":"Git Quick Actions"},{"command":"gitQuick.undoCommit","title":"Undo Last Commit (Keep Changes)","category":"Git Quick Actions"},{"command":"gitQuick.newBranch","title":"New Branch...","category":"Git Quick Actions"},{"command":"gitQuick.switchBranch","title":"Switch Branch...","category":"Git Quick Actions"},{"command":"gitQuick.branches","title":"List Branches","category":"Git Quick Actions"},{"command":"gitQuick.stash","title":"Stash Changes","category":"Git Quick Actions"},{"command":"gitQuick.stashPop","title":"Pop Stash","category":"Git Quick Actions"},{"command":"gitQuick.log","title":"Show Log Graph","category":"Git Quick Actions"},{"command":"gitQuick.diff","title":"Show Diff","category":"Git Quick Actions"},{"command":"gitQuick.diffStaged","title":"Show Staged Diff","category":"Git Quick Actions"},{"command":"gitQuick.discardUnstaged","title":"Discard Unstaged Changes","category":"Git Quick Actions"},{"command":"gitQuick.tag","title":"Create Tag...","category":"Git Quick Actions"},{"command":"gitQuick.tags","title":"List Tags","category":"Git Quick Actions"},{"command":"gitQuick.remotes","title":"Show Remotes","category":"Git Quick Actions"},{"command":"gitQuick.fileHistory","title":"History of This File","category":"Git Quick Actions"},{"command":"gitQuick.blameFile","title":"Blame This File","category":"Git Quick Actions"}],"viewsContainers":[{"id":"git","title":"Git Quick","icon":"source-control"}],"views":[{"id":"gitQuick.actions","name":"Actions","container":"git","type":"html"}]}},"files":{"icon.png":{"encoding":"base64","content":"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"},"extension.js":{"encoding":"utf8","content":"// Git Quick Actions: the git commands you use all day, one command away. Everything runs visibly in the terminal.\n\n// Double quotes work in cmd, PowerShell and Bash. Anything a shell would treat specially inside them is refused.\nconst q = (s) => {\n  const t = String(s);\n  if (/[\"$`\\\\!%^]/.test(t)) throw new Error('That text has a character that is not safe to type into a shell (double quote, dollar, backtick, backslash, !, %, ^). Use the terminal for it.');\n  return '\"' + t + '\"';\n};\n/** Paths are written with forward slashes, which every shell and git accept. */\nconst qpath = (p) => q(String(p).replace(/\\\\/g, '/'));\n\n/** A commit message must be one line without anything a shell would treat specially. */\nfunction commitCommand(message, all) {\n  const m = String(message).trim();\n  if (!m) throw new Error('A commit message cannot be empty.');\n  if (/[\\r\\n]/.test(m)) throw new Error('Use a one line message here.');\n  return (all ? 'git add -A && ' : '') + 'git commit -m ' + q(m);\n}\n\nfunction branchName(s) {\n  const b = String(s).trim().replace(/\\s+/g, '-');\n  if (!/^[A-Za-z0-9._\\/-]+$/.test(b) || b.startsWith('-') || b.includes('..') || b.endsWith('/') || b.endsWith('.lock')) throw new Error('That is not a good branch name. Use letters, digits, dots, dashes and slashes.');\n  return b;\n}\n\nexports._test = { q, qpath, commitCommand, branchName };\n\nconst BUTTONS = [\n  ['Changes', [['gitQuick.status', 'Status'], ['gitQuick.diff', 'Diff'], ['gitQuick.diffStaged', 'Staged diff'], ['gitQuick.log', 'Log']]],\n  ['Sync', [['gitQuick.fetch', 'Fetch'], ['gitQuick.pull', 'Pull'], ['gitQuick.push', 'Push']]],\n  ['Commit', [['gitQuick.commit', 'Commit staged...'], ['gitQuick.commitAll', 'Stage all and commit...'], ['gitQuick.amend', 'Amend'], ['gitQuick.undoCommit', 'Undo last commit']]],\n  ['Branches', [['gitQuick.newBranch', 'New branch...'], ['gitQuick.switchBranch', 'Switch...'], ['gitQuick.branches', 'List'], ['gitQuick.tag', 'Tag...']]],\n  ['Stash', [['gitQuick.stash', 'Stash'], ['gitQuick.stashPop', 'Pop']]],\n  ['This file', [['gitQuick.fileHistory', 'History'], ['gitQuick.blameFile', 'Blame']]],\n];\n\nfunction sidebarPage() {\n  const esc = (s) => String(s).replace(/&/g, '&amp;').replace(/</g, '&lt;');\n  const groups = BUTTONS.map(([title, list]) => '<h4>' + esc(title) + '</h4><div class=\"g\">' + list.map(([id, label]) => '<button data-c=\"' + id + '\">' + esc(label) + '</button>').join('') + '</div>').join('');\n  return '<style>body{font-family:var(--ui);padding:8px 10px}h4{margin:12px 0 6px;font-size:11px;letter-spacing:.05em;text-transform:uppercase;color:var(--fg-dim)}.g{display:flex;flex-wrap:wrap;gap:6px}button{background:var(--raised,transparent);color:var(--fg);border:1px solid var(--border);border-radius:5px;padding:4px 9px;cursor:pointer;font-size:12px}button:hover{border-color:var(--accent)}</style>' + groups + '<script>document.querySelectorAll(\"button[data-c]\").forEach(function(b){b.onclick=function(){ferrumPanel.postMessage({type:\"run\",id:b.dataset.c})}})</script>';\n}\n\nexports.activate = function (context) {\n  const reg = (id, fn) => context.subscriptions.push(ferrum.commands.register(id, fn));\n  const run = (cmd) => ferrum.terminal.run(cmd);\n  const page = ferrum.window.registerHtmlView('gitQuick.actions', { html: sidebarPage() });\n  context.subscriptions.push(page);\n  page.onMessage((m) => { if (m && m.type === 'run' && BUTTONS.some(([, l]) => l.some(([id]) => id === m.id))) ferrum.commands.execute(m.id); });\n  const simple = {\n    'gitQuick.status': 'git status -sb', 'gitQuick.pull': 'git pull --ff-only', 'gitQuick.push': 'git push', 'gitQuick.fetch': 'git fetch --all --prune',\n    'gitQuick.log': 'git log --oneline --graph --decorate -20', 'gitQuick.diff': 'git diff', 'gitQuick.diffStaged': 'git diff --staged', 'gitQuick.stash': 'git stash push -u',\n    'gitQuick.stashPop': 'git stash pop', 'gitQuick.undoCommit': 'git reset --soft HEAD~1', 'gitQuick.discardUnstaged': null, 'gitQuick.branches': 'git branch -vv',\n    'gitQuick.remotes': 'git remote -v', 'gitQuick.amend': 'git commit --amend --no-edit', 'gitQuick.tags': 'git tag --sort=-creatordate | head -20',\n  };\n  for (const [id, cmd] of Object.entries(simple)) {\n    if (cmd) reg(id, () => run(cmd));\n  }\n\n  reg('gitQuick.discardUnstaged', async () => {\n    if (await ferrum.window.confirm('Discard every change that is not staged? This cannot be undone.', 'Discard')) await run('git restore .');\n  });\n  reg('gitQuick.commit', async () => {\n    const m = await ferrum.window.showInputBox({ prompt: 'Commit message (staged changes)', placeholder: 'Fix the thing' });\n    if (m === undefined) return;\n    try { await run(commitCommand(m, false)); } catch (e) { ferrum.window.showMessage(e.message, 'warn'); }\n  });\n  reg('gitQuick.commitAll', async () => {\n    const m = await ferrum.window.showInputBox({ prompt: 'Commit message (stages everything first)', placeholder: 'Fix the thing' });\n    if (m === undefined) return;\n    try { await run(commitCommand(m, true)); } catch (e) { ferrum.window.showMessage(e.message, 'warn'); }\n  });\n  reg('gitQuick.newBranch', async () => {\n    const n = await ferrum.window.showInputBox({ prompt: 'New branch name', placeholder: 'feature/my-change' });\n    if (n === undefined) return;\n    try { await run('git switch -c ' + q(branchName(n))); } catch (e) { ferrum.window.showMessage(e.message, 'warn'); }\n  });\n  reg('gitQuick.switchBranch', async () => {\n    const n = await ferrum.window.showInputBox({ prompt: 'Switch to which branch?', placeholder: 'main' });\n    if (n === undefined) return;\n    try { await run('git switch ' + q(branchName(n))); } catch (e) { ferrum.window.showMessage(e.message, 'warn'); }\n  });\n  reg('gitQuick.tag', async () => {\n    const n = await ferrum.window.showInputBox({ prompt: 'Tag name', placeholder: 'v1.0.0' });\n    if (n === undefined) return;\n    try { await run('git tag ' + q(branchName(n))); } catch (e) { ferrum.window.showMessage(e.message, 'warn'); }\n  });\n  reg('gitQuick.fileHistory', async () => {\n    const doc = await ferrum.editor.active();\n    if (!doc || !doc.path) return ferrum.window.showMessage('Open a saved file first.', 'warn');\n    await run('git log --follow --oneline -- ' + qpath(doc.path));\n  });\n  reg('gitQuick.blameFile', async () => {\n    const doc = await ferrum.editor.active();\n    if (!doc || !doc.path) return ferrum.window.showMessage('Open a saved file first.', 'warn');\n    await run('git blame ' + qpath(doc.path));\n  });\n};\n\nexports.deactivate = function () {};\n"},"README.md":{"encoding":"utf8","content":"# Git Quick Actions\n\nThe git commands you type every day, in the command palette (prefix \"Git Quick\"). They run **in the terminal, in front of you**, so nothing is hidden, and you can edit the command before pressing Enter if you want.\n\n- Status, pull (fast-forward only), push, fetch all with prune.\n- Commit staged, stage everything and commit, amend, undo the last commit but keep the changes.\n- New branch, switch branch, list branches.\n- Stash and pop, log graph, diff, staged diff, tags, remotes.\n- History and blame of the open file.\n- **Discard Unstaged Changes** asks first.\n\nMessages and names are checked so nothing special (quotes, dollar signs, backticks) reaches the shell.\n\n## Permissions\n**terminal**, to type commands into the terminal.\n\n## Sidebar\n\nSince 1.1.0 an activity bar page shows the commands as buttons, grouped as Changes, Sync, Commit, Branches, Stash and This file.\n"}}}