diff --git a/package-lock.json b/package-lock.json index 34ac1f78..156a166e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1633,6 +1633,11 @@ "assert-plus": "^1.0.0" } }, + "date-fns": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.8.1.tgz", + "integrity": "sha512-EL/C8IHvYRwAHYgFRse4MGAPSqlJVlOrhVYZ75iQBKrnv+ZedmYsgwH3t+BCDuZDXpoo07+q9j4qgSSOa7irJg==" + }, "dateformat": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", @@ -4250,7 +4255,7 @@ }, "chownr": { "version": "1.1.2", - "resolved": false, + "resolved": "", "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==", "dev": true }, @@ -4972,7 +4977,7 @@ }, "fs-minipass": { "version": "1.2.6", - "resolved": false, + "resolved": "", "integrity": "sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==", "dev": true, "requires": { @@ -5195,7 +5200,7 @@ }, "graceful-fs": { "version": "4.2.2", - "resolved": false, + "resolved": "", "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==", "dev": true }, @@ -5244,7 +5249,7 @@ }, "hosted-git-info": { "version": "2.8.2", - "resolved": false, + "resolved": "", "integrity": "sha512-CyjlXII6LMsPMyUzxpTt8fzh5QwzGqPmQXgY/Jyf4Zfp27t/FvfhwoE/8laaMUcMy816CkWF20I7NeQhwwY88w==", "dev": true, "requires": { @@ -5280,7 +5285,8 @@ }, "https-proxy-agent": { "version": "2.2.2", - "resolved": "", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.2.tgz", + "integrity": "sha512-c8Ndjc9Bkpfx/vCJueCPy0jlP4ccCCSNDp8xwCZzPjKJUm+B+u9WX2x98Qx4n1PiMNTWo3D7KK5ifNV/yJyRzg==", "dev": true, "requires": { "agent-base": "^4.3.0", @@ -5313,7 +5319,7 @@ }, "ignore-walk": { "version": "3.0.1", - "resolved": false, + "resolved": "", "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", "dev": true, "requires": { @@ -5607,7 +5613,7 @@ }, "libcipm": { "version": "4.0.3", - "resolved": false, + "resolved": "", "integrity": "sha512-nuIxNtqA+kIkwUiNM/nZ0yPyR7NkSUov6g6mCfFPkYylO1dEovZBL+NZ3axdouS2UOTa8GdnJ7/meSc1/0AIGw==", "dev": true, "requires": { @@ -6014,7 +6020,7 @@ }, "minipass": { "version": "2.3.3", - "resolved": false, + "resolved": "", "integrity": "sha512-/jAn9/tEX4gnpyRATxgHEOV6xbcyxgT7iUnxo9Y3+OB0zX00TgKIv/2FZCf5brBbICcwbLqVv2ImjvWWrQMSYw==", "dev": true, "requires": { @@ -6024,7 +6030,7 @@ "dependencies": { "yallist": { "version": "3.0.2", - "resolved": false, + "resolved": "", "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=", "dev": true } @@ -6032,7 +6038,7 @@ }, "minizlib": { "version": "1.2.1", - "resolved": false, + "resolved": "", "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", "dev": true, "requires": { @@ -6113,7 +6119,7 @@ }, "node-gyp": { "version": "5.0.3", - "resolved": false, + "resolved": "", "integrity": "sha512-z/JdtkFGUm0QaQUusvloyYuGDub3nUbOo5de1Fz57cM++osBTvQatBUSTlF1k/w8vFHPxxXW6zxGvkxXSpaBkQ==", "dev": true, "requires": { @@ -6204,7 +6210,7 @@ }, "npm-install-checks": { "version": "3.0.0", - "resolved": false, + "resolved": "", "integrity": "sha1-1K7N/VGlPjcjt7L5Oy7ijjB7wNc=", "dev": true, "requires": { @@ -6213,7 +6219,7 @@ }, "npm-lifecycle": { "version": "3.1.3", - "resolved": false, + "resolved": "", "integrity": "sha512-M0QmmqbEHBXxDrmc6X3+eKjW9+F7Edg1ENau92WkYw1sox6wojHzEZJIRm1ItljEiaigZlKL8mXni/4ylAy1Dg==", "dev": true, "requires": { @@ -6247,7 +6253,7 @@ }, "npm-packlist": { "version": "1.4.4", - "resolved": false, + "resolved": "", "integrity": "sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw==", "dev": true, "requires": { @@ -6279,7 +6285,7 @@ }, "npm-registry-fetch": { "version": "4.0.0", - "resolved": false, + "resolved": "", "integrity": "sha512-Jllq35Jag8dtv0M17ue74XtdQTyqKzuAYGiX9mAjOhkmNjib3bBUgK6mUY61+AHnXeSRobQkpY3/xIOS/omptw==", "dev": true, "requires": { @@ -6444,7 +6450,7 @@ }, "pacote": { "version": "9.5.8", - "resolved": false, + "resolved": "", "integrity": "sha512-0Tl8Oi/K0Lo4MZmH0/6IsT3gpGf9eEAznLXEQPKgPq7FscnbUOyopnVpwXlnQdIbCUaojWy1Wd7VMyqfVsRrIw==", "dev": true, "requires": { @@ -6481,7 +6487,7 @@ "dependencies": { "minipass": { "version": "2.3.5", - "resolved": false, + "resolved": "", "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", "dev": true, "requires": { @@ -6747,7 +6753,7 @@ }, "read-cmd-shim": { "version": "1.0.4", - "resolved": false, + "resolved": "", "integrity": "sha512-Pqpl3qJ/QdOIjRYA0q5DND/gLvGOfpIz/fYVDGYpOXfW/lFrIttmLsBnd6IkyK10+JHU9zhsaudfvrQTBB9YFQ==", "dev": true, "requires": { @@ -7243,7 +7249,7 @@ }, "stringify-package": { "version": "1.0.0", - "resolved": false, + "resolved": "", "integrity": "sha512-JIQqiWmLiEozOC0b0BtxZ/AOUtdUZHCBPgqIZ2kSJJqGwgb9neo44XdTHUC4HZSGqi03hOeB7W/E8rAlKnGe9g==", "dev": true }, @@ -7279,7 +7285,7 @@ }, "tar": { "version": "4.4.10", - "resolved": false, + "resolved": "", "integrity": "sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA==", "dev": true, "requires": { @@ -7294,7 +7300,7 @@ "dependencies": { "minipass": { "version": "2.3.5", - "resolved": false, + "resolved": "", "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", "dev": true, "requires": { @@ -7304,7 +7310,7 @@ }, "yallist": { "version": "3.0.3", - "resolved": false, + "resolved": "", "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", "dev": true } @@ -7512,7 +7518,7 @@ }, "uuid": { "version": "3.3.2", - "resolved": false, + "resolved": "", "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", "dev": true }, diff --git a/package.json b/package.json index 7d8a09ee..0a418092 100644 --- a/package.json +++ b/package.json @@ -47,6 +47,7 @@ "watch:css": "npm run build:css -- -w" }, "dependencies": { + "date-fns": "^2.8.1", "minimatch": "^3.0.4", "original-fs": "^1.0.0", "semver": "^6.0.0", diff --git a/src/historyView/common.ts b/src/historyView/common.ts index c35d3fcb..3c862023 100644 --- a/src/historyView/common.ts +++ b/src/historyView/common.ts @@ -1,4 +1,5 @@ import { createHash } from "crypto"; +import { formatDistanceToNow } from "date-fns"; import * as path from "path"; import { commands, @@ -219,12 +220,18 @@ export function getCommitIcon( return gravatar; } +export function getCommitDescription(commit: ISvnLogEntry): string { + const relativeDate = formatDistanceToNow(Date.parse(commit.date), { + addSuffix: true + }); + return `r${commit.revision}, ${relativeDate} by ${commit.author}`; +} + export function getCommitLabel(commit: ISvnLogEntry): string { - let commitMsg = ""; - if (commit.msg) { - commitMsg = commit.msg.split(/\r?\n/, 1)[0]; + if (!commit.msg) { + return ""; } - return `${commitMsg} • r${commit.revision}`; + return commit.msg.split(/\r?\n/, 1)[0]; } export function getCommitToolTip(commit: ISvnLogEntry): string { diff --git a/src/historyView/itemLogProvider.ts b/src/historyView/itemLogProvider.ts index 3bd57dca..0d086ac2 100644 --- a/src/historyView/itemLogProvider.ts +++ b/src/historyView/itemLogProvider.ts @@ -29,7 +29,8 @@ import { LogTreeItemKind, openDiff, openFileRemote, - transform + transform, + getCommitDescription } from "./common"; export class ItemLogProvider @@ -156,6 +157,7 @@ export class ItemLogProvider if (element.kind === LogTreeItemKind.Commit) { const commit = element.data as ISvnLogEntry; ti = new TreeItem(getCommitLabel(commit), TreeItemCollapsibleState.None); + ti.description = getCommitDescription(commit); ti.iconPath = getCommitIcon(commit.author); ti.tooltip = getCommitToolTip(commit); ti.contextValue = "diffable"; @@ -182,6 +184,7 @@ export class ItemLogProvider const fname = path.basename(this.currentItem.svnTarget.fsPath); const ti = new TreeItem(fname, TreeItemCollapsibleState.Expanded); ti.tooltip = path.dirname(this.currentItem.svnTarget.fsPath); + ti.description = path.dirname(this.currentItem.svnTarget.fsPath); ti.iconPath = getIconObject("icon-history"); const item = { kind: LogTreeItemKind.TItem, diff --git a/src/historyView/repoLogProvider.ts b/src/historyView/repoLogProvider.ts index d567cb8d..e4809b13 100644 --- a/src/historyView/repoLogProvider.ts +++ b/src/historyView/repoLogProvider.ts @@ -37,7 +37,8 @@ import { openDiff, openFileRemote, SvnPath, - transform + transform, + getCommitDescription } from "./common"; function getActionIcon(action: string) { @@ -377,6 +378,7 @@ export class RepoLogProvider getCommitLabel(commit), TreeItemCollapsibleState.Collapsed ); + ti.description = getCommitDescription(commit); ti.tooltip = getCommitToolTip(commit); ti.iconPath = getCommitIcon(commit.author); ti.contextValue = "commit"; @@ -385,6 +387,7 @@ export class RepoLogProvider const pathElem = element.data as ISvnLogEntryPath; const basename = path.basename(pathElem._); ti = new TreeItem(basename, TreeItemCollapsibleState.None); + ti.description = path.dirname(pathElem._); const cached = this.getCached(element); const nm = cached.repo.getPathNormalizer(); ti.tooltip = nm.parse(pathElem._).relativeFromBranch;