Skip to content

Commit

Permalink
Fixes issue with stashes w/ only untracked files
Browse files Browse the repository at this point in the history
  • Loading branch information
eamodio committed Sep 15, 2017
1 parent 1ec0a29 commit 8e3f5e7
Show file tree
Hide file tree
Showing 6 changed files with 39 additions and 28 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/) and this p
- Removes `gitlens.annotations.file.recentChanges.hover.wholeLine` setting as it didn't really make sense

### Fixed
- Fixes an issue where stashes with only untracked files would not show in the `Stashes` node of the GitLens custom view

## [5.0.0] - 2017-09-12
### Added
Expand Down
2 changes: 1 addition & 1 deletion src/git/gitUri.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ export class GitUri extends Uri {
}
else {
const commit = commitOrRepoPath;
base._fsPath = path.resolve(commit.repoPath, commit.originalFileName || commit.fileName);
base._fsPath = path.resolve(commit.repoPath, commit.originalFileName || commit.fileName || '');

if (commit.repoPath !== undefined) {
this.repoPath = commit.repoPath;
Expand Down
2 changes: 1 addition & 1 deletion src/git/models/commit.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ export class GitCommit {
}

get uri(): Uri {
return Uri.file(path.resolve(this.repoPath, this.originalFileName || this.fileName));
return Uri.file(path.resolve(this.repoPath, this.originalFileName || this.fileName || ''));
}

private _dateFormatter?: Dates.IDateFormatter;
Expand Down
7 changes: 6 additions & 1 deletion src/git/models/logCommit.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,12 @@ export class GitLogCommit extends GitCommit {
this.status = fileStatus.status;
}
else {
this.fileStatuses = [{ status: status, fileName: fileName, originalFileName: originalFileName } as IGitStatusFile];
if (fileName === undefined) {
this.fileStatuses = [];
}
else {
this.fileStatuses = [{ status: status, fileName: fileName, originalFileName: originalFileName } as IGitStatusFile];
}
this.status = status;
}
}
Expand Down
53 changes: 29 additions & 24 deletions src/git/parsers/stashParser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,33 @@ interface StashEntry {

export class GitStashParser {

static parse(data: string, repoPath: string): GitStash | undefined {
const entries = this._parseEntries(data);
if (entries === undefined) return undefined;

const commits: Map<string, GitStashCommit> = new Map();

for (let i = 0, len = entries.length; i < len; i++) {
const entry = entries[i];

let commit = commits.get(entry.sha);
if (commit === undefined) {
commit = new GitStashCommit(entry.stashName, repoPath, entry.sha, entry.fileNames, new Date(entry.date! as any * 1000), entry.summary, undefined, entry.fileStatuses) as GitStashCommit;
commits.set(entry.sha, commit);
}
}

return {
repoPath: repoPath,
commits: commits
} as GitStash;
}

private static _parseEntries(data: string): StashEntry[] | undefined {
if (!data) return undefined;

const lines = data.split('\n');
if (!lines.length) return undefined;
if (lines.length === 0) return undefined;

const entries: StashEntry[] = [];

Expand Down Expand Up @@ -65,7 +87,12 @@ export class GitStashParser {
case 'filename':
const nextLine = lines[position + 1];
// If the next line isn't blank, make sure it isn't starting a new commit
if (nextLine && Git.shaRegex.test(nextLine)) continue;
if (nextLine && Git.shaRegex.test(nextLine)) {
entries.push(entry);
entry = undefined;

continue;
}

position++;

Expand Down Expand Up @@ -108,28 +135,6 @@ export class GitStashParser {
return entries;
}

static parse(data: string, repoPath: string): GitStash | undefined {
const entries = this._parseEntries(data);
if (entries === undefined) return undefined;

const commits: Map<string, GitStashCommit> = new Map();

for (let i = 0, len = entries.length; i < len; i++) {
const entry = entries[i];

let commit = commits.get(entry.sha);
if (commit === undefined) {
commit = new GitStashCommit(entry.stashName, repoPath, entry.sha, entry.fileNames, new Date(entry.date! as any * 1000), entry.summary, undefined, entry.fileStatuses) as GitStashCommit;
commits.set(entry.sha, commit);
}
}

return {
repoPath: repoPath,
commits: commits
} as GitStash;
}

private static _parseFileName(entry: { fileName?: string, originalFileName?: string }) {
if (entry.fileName === undefined) return;

Expand Down
2 changes: 1 addition & 1 deletion src/git/parsers/statusParser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ export class GitStatusParser {
if (!data) return undefined;

const lines = data.split('\n').filter(_ => !!_);
if (!lines.length) return undefined;
if (lines.length === 0) return undefined;

const status = {
branch: '',
Expand Down

0 comments on commit 8e3f5e7

Please sign in to comment.