diff --git a/CHANGELOG.md b/CHANGELOG.md index caccfdb..3266825 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/) and this p ### Fixed - Fixes an issue where stashes with only untracked files would not show in the `Stashes` node of the GitLens custom view +- Fixes an issue where stashes with untracked files would not show its untracked files in the GitLens custom view ## [5.0.0] - 2017-09-12 ### Added diff --git a/images/dark/icon-status-conflict.svg b/images/dark/icon-status-conflict.svg index 53b243c..cd4f007 100644 --- a/images/dark/icon-status-conflict.svg +++ b/images/dark/icon-status-conflict.svg @@ -1,6 +1,6 @@ - C + ! \ No newline at end of file diff --git a/images/dark/icon-status-unknown.svg b/images/dark/icon-status-unknown.svg new file mode 100644 index 0000000..a265402 --- /dev/null +++ b/images/dark/icon-status-unknown.svg @@ -0,0 +1,6 @@ + + + + ? + + \ No newline at end of file diff --git a/images/light/icon-status-conflict.svg b/images/light/icon-status-conflict.svg index b6088ec..8588cda 100644 --- a/images/light/icon-status-conflict.svg +++ b/images/light/icon-status-conflict.svg @@ -1,6 +1,6 @@ - C + ! \ No newline at end of file diff --git a/images/light/icon-status-unknown.svg b/images/light/icon-status-unknown.svg new file mode 100644 index 0000000..a265402 --- /dev/null +++ b/images/light/icon-status-unknown.svg @@ -0,0 +1,6 @@ + + + + ? + + \ No newline at end of file diff --git a/src/git/models/status.ts b/src/git/models/status.ts index 3fea032..ac6d1fe 100644 --- a/src/git/models/status.ts +++ b/src/git/models/status.ts @@ -19,7 +19,7 @@ export interface GitStatus { files: GitStatusFile[]; } -export declare type GitStatusFileStatus = '!' | '?' | 'A' | 'C' | 'D' | 'M' | 'R' | 'U'; +export declare type GitStatusFileStatus = '!' | '?' | 'A' | 'C' | 'D' | 'M' | 'R' | 'T' | 'U' | 'X' | 'B'; export interface IGitStatusFile { status: GitStatusFileStatus; @@ -71,7 +71,10 @@ const statusOcticonsMap = { D: '$(diff-removed)', M: '$(diff-modified)', R: '$(diff-renamed)', - U: '$(question)' + T: '$(diff-modified)', + U: '$(alert)', + X: '$(question)', + B: '$(question)' }; export function getGitStatusOcticon(status: GitStatusFileStatus, missing: string = GlyphChars.Space.repeat(4)): string { @@ -86,7 +89,10 @@ const statusIconsMap = { D: 'icon-status-deleted.svg', M: 'icon-status-modified.svg', R: 'icon-status-renamed.svg', - U: 'icon-status-conflict.svg' + T: 'icon-status-modified.svg', + U: 'icon-status-conflict.svg', + X: 'icon-status-unknown.svg', + B: 'icon-status-unknown.svg' }; export function getGitStatusIcon(status: GitStatusFileStatus): string { diff --git a/src/views/stashNode.ts b/src/views/stashNode.ts index b788bc0..1bb609f 100644 --- a/src/views/stashNode.ts +++ b/src/views/stashNode.ts @@ -1,4 +1,5 @@ 'use strict'; +import { Iterables } from '../system'; import { ExtensionContext, TreeItem, TreeItemCollapsibleState } from 'vscode'; import { ExplorerNode, ResourceType } from './explorerNode'; import { CommitFormatter, GitService, GitStashCommit, GitUri, ICommitFormatOptions } from '../gitService'; @@ -13,7 +14,20 @@ export class StashNode extends ExplorerNode { } async getChildren(): Promise { - return Promise.resolve((this.commit as GitStashCommit).fileStatuses.map(s => new StashFileNode(s, this.commit, this.context, this.git))); + const statuses = (this.commit as GitStashCommit).fileStatuses; + + // Check for any untracked files -- since git doesn't return them via `git stash list` :( + const log = await this.git.getLogForRepo(this.commit.repoPath, `${(this.commit as GitStashCommit).stashName}^3`, 1); + if (log !== undefined) { + const commit = Iterables.first(log.commits.values()); + if (commit !== undefined && commit.fileStatuses.length !== 0) { + // Since these files are untracked -- make them look that way + commit.fileStatuses.forEach(s => s.status = '?'); + statuses.splice(statuses.length, 0, ...commit.fileStatuses); + } + } + + return Promise.resolve(statuses.map(s => new StashFileNode(s, this.commit, this.context, this.git))); } getTreeItem(): TreeItem {