Skip to content

Commit 7b2ba63

Browse files
committed
Adds ability to search commits by date in commit graph
1 parent f884fc6 commit 7b2ba63

File tree

3 files changed

+62
-4
lines changed

3 files changed

+62
-4
lines changed

src/constants.search.ts

+16-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
1-
type SearchOperatorsShortForm = '' | '=:' | '@:' | '#:' | '?:' | '~:' | 'is:';
2-
export type SearchOperatorsLongForm = 'message:' | 'author:' | 'commit:' | 'file:' | 'change:' | 'type:';
1+
type SearchOperatorsShortForm = '' | '=:' | '@:' | '#:' | '?:' | '~:' | 'is:' | 'after:' | 'before:';
2+
export type SearchOperatorsLongForm =
3+
| 'message:'
4+
| 'author:'
5+
| 'commit:'
6+
| 'file:'
7+
| 'change:'
8+
| 'type:'
9+
| 'after:'
10+
| 'before:';
311
export type SearchOperators = SearchOperatorsShortForm | SearchOperatorsLongForm;
412

513
export const searchOperators = new Set<string>([
@@ -16,6 +24,8 @@ export const searchOperators = new Set<string>([
1624
'change:',
1725
'is:',
1826
'type:',
27+
'after:',
28+
'before:',
1929
]);
2030

2131
export const searchOperatorsToLongFormMap = new Map<SearchOperators, SearchOperatorsLongForm>([
@@ -32,13 +42,15 @@ export const searchOperatorsToLongFormMap = new Map<SearchOperators, SearchOpera
3242
['change:', 'change:'],
3343
['is:', 'type:'],
3444
['type:', 'type:'],
45+
['after:', 'after:'],
46+
['before:', 'before:'],
3547
]);
3648

3749
export const searchOperationRegex =
38-
/(?:(?<op>=:|message:|@:|author:|#:|commit:|\?:|file:|~:|change:|is:|type:)\s?(?<value>".+?"|\S+}?))|(?<text>\S+)(?!(?:=|message|@|author|#|commit|\?|file|~|change|is|type):)/g;
50+
/(?:(?<op>=:|message:|@:|author:|#:|commit:|\?:|file:|~:|change:|is:|type:|after:|before:)\s?(?<value>".+?"|\S+}?))|(?<text>\S+)(?!(?:=|message|@|author|#|commit|\?|file|~|change|is|type):)/g;
3951

4052
export const searchOperationHelpRegex =
41-
/(?:^|(\b|\s)*)((=:|message:|@:|author:|#:|commit:|\?:|file:|~:|change:|is:|type:)(?:"[^"]*"?|\w*))(?:$|(\b|\s))/g;
53+
/(?:^|(\b|\s)*)((=:|message:|@:|author:|#:|commit:|\?:|file:|~:|change:|is:|type:|after:|before:)(?:"[^"]*"?|\w*))(?:$|(\b|\s))/g;
4254

4355
export interface SearchQuery {
4456
query: string;

src/git/search.ts

+12
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,18 @@ export function getGitArgsFromSearchQuery(
213213
}
214214
}
215215

216+
break;
217+
case 'after:':
218+
for (const value of values) {
219+
const date = new Date(value);
220+
searchArgs.add('--after').add(date.toISOString());
221+
}
222+
break;
223+
case 'before:':
224+
for (const value of values) {
225+
const date = new Date(value);
226+
searchArgs.add('--before').add(date.toISOString());
227+
}
216228
break;
217229
}
218230
}

src/webviews/apps/shared/components/search/search-input.ts

+34
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,22 @@ export class GlSearchInput extends GlElement {
389389
this.searchHistoryPos = this.searchHistory.length - 1;
390390
}
391391

392+
private padDate(date: number) {
393+
let stringDate = date.toString();
394+
if (stringDate.length < 2) {
395+
stringDate = `0${stringDate}`;
396+
}
397+
return stringDate;
398+
}
399+
400+
private handleInsertDateToken(tokenPrefix: string) {
401+
const currentDate = new Date();
402+
const year = currentDate.getFullYear();
403+
const month = this.padDate(currentDate.getMonth() + 1);
404+
const date = this.padDate(currentDate.getDate());
405+
this.handleInsertToken(`${tokenPrefix}${year}-${month}-${date}`);
406+
}
407+
392408
override render() {
393409
return html`<div class="field">
394410
<div class="controls controls__start">
@@ -486,6 +502,24 @@ export class GlSearchInput extends GlElement {
486502
Type <small>type:stash or is:stash</small>
487503
</button>
488504
</menu-item>
505+
<menu-item role="none">
506+
<button
507+
class="menu-button"
508+
type="button"
509+
@click="${() => this.handleInsertDateToken('after:')}"
510+
>
511+
Date from <small>after:YYYY-MM-dd</small>
512+
</button>
513+
</menu-item>
514+
<menu-item role="none">
515+
<button
516+
class="menu-button"
517+
type="button"
518+
@click="${() => this.handleInsertDateToken(`before:`)}"
519+
>
520+
Date to <small>before:YYYY-MM-dd</small>
521+
</button>
522+
</menu-item>
489523
</div>
490524
</gl-popover>
491525
</div>

0 commit comments

Comments
 (0)