Skip to content

Commit fe70268

Browse files
committed
feat: add command to open all the changed files in git
1 parent b6703e0 commit fe70268

5 files changed

Lines changed: 56 additions & 0 deletions

File tree

src/command/Commands.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -537,6 +537,9 @@ define(function (require, exports, module) {
537537
/** Closes unmodified files */
538538
exports.CMD_GIT_CLOSE_UNMODIFIED = "git-close-unmodified-files";
539539

540+
/** Opens all modified/untracked files */
541+
exports.CMD_GIT_OPEN_CHANGED_FILES = "git-open-changed-files";
542+
540543
/** Checks out a branch or commit */
541544
exports.CMD_GIT_CHECKOUT = "git-checkout";
542545

src/extensions/default/Git/src/Constants.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ define(function (require, exports) {
3636
exports.CMD_GIT_CLONE_WITH_URL = Commands.CMD_GIT_CLONE_WITH_URL;
3737
exports.CMD_GIT_SETTINGS_COMMAND_ID = Commands.CMD_GIT_SETTINGS_COMMAND_ID;
3838
exports.CMD_GIT_CLOSE_UNMODIFIED = Commands.CMD_GIT_CLOSE_UNMODIFIED;
39+
exports.CMD_GIT_OPEN_CHANGED_FILES = Commands.CMD_GIT_OPEN_CHANGED_FILES;
3940
exports.CMD_GIT_CHECKOUT = Commands.CMD_GIT_CHECKOUT;
4041
exports.CMD_GIT_RESET_HARD = Commands.CMD_GIT_RESET_HARD;
4142
exports.CMD_GIT_RESET_SOFT = Commands.CMD_GIT_RESET_SOFT;

src/extensions/default/Git/src/Main.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,7 @@ define(function (require, exports) {
241241
Constants.CMD_GIT_RESET_SOFT,
242242

243243
// "More options" context menu commands
244+
Constants.CMD_GIT_OPEN_CHANGED_FILES,
244245
Constants.CMD_GIT_DISCARD_ALL_CHANGES,
245246
Constants.CMD_GIT_UNDO_LAST_COMMIT,
246247
Constants.CMD_GIT_TOGGLE_UNTRACKED,
@@ -322,6 +323,8 @@ define(function (require, exports) {
322323
// create context menu for git more options
323324
const optionsCmenu = Menus.registerContextMenu(Constants.GIT_PANEL_OPTIONS_CMENU);
324325
Menus.ContextMenu.assignContextMenuToSelector(".git-more-options-btn", optionsCmenu);
326+
optionsCmenu.addMenuItem(Constants.CMD_GIT_OPEN_CHANGED_FILES);
327+
optionsCmenu.addMenuDivider();
325328
optionsCmenu.addMenuItem(Constants.CMD_GIT_DISCARD_ALL_CHANGES);
326329
optionsCmenu.addMenuItem(Constants.CMD_GIT_UNDO_LAST_COMMIT);
327330
optionsCmenu.addMenuDivider();
@@ -398,6 +401,7 @@ define(function (require, exports) {
398401
Utils.enableCommand(Constants.CMD_GIT_GOTO_NEXT_CHANGE, enabled);
399402
Utils.enableCommand(Constants.CMD_GIT_GOTO_PREVIOUS_CHANGE, enabled);
400403
Utils.enableCommand(Constants.CMD_GIT_CLOSE_UNMODIFIED, enabled);
404+
Utils.enableCommand(Constants.CMD_GIT_OPEN_CHANGED_FILES, enabled);
401405

402406
Utils.enableCommand(Constants.CMD_GIT_AUTHORS_OF_SELECTION, enabled);
403407
Utils.enableCommand(Constants.CMD_GIT_AUTHORS_OF_FILE, enabled);

src/extensions/default/Git/src/Panel.js

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ define(function (require, exports) {
1515
Menus = brackets.getModule("command/Menus"),
1616
Mustache = brackets.getModule("thirdparty/mustache/mustache"),
1717
FindInFiles = brackets.getModule("search/FindInFiles"),
18+
MainViewManager = brackets.getModule("view/MainViewManager"),
1819
WorkspaceManager = brackets.getModule("view/WorkspaceManager"),
1920
ProjectManager = brackets.getModule("project/ProjectManager"),
2021
StringUtils = brackets.getModule("utils/StringUtils"),
@@ -1007,6 +1008,49 @@ define(function (require, exports) {
10071008
});
10081009
}
10091010

1011+
function openAllChangedFiles() {
1012+
return Git.status().then(function (files) {
1013+
files = _.filter(files, function (file) {
1014+
if (!shouldShow(file)) {
1015+
return false;
1016+
}
1017+
// deleted files no longer exist on disk, so there is nothing to open
1018+
if (file.status.indexOf(Git.FILE_STATUS.DELETED) !== -1) {
1019+
return false;
1020+
}
1021+
// respect the "show untracked files" panel toggle
1022+
if (!showingUntracked && file.status.indexOf(Git.FILE_STATUS.UNTRACKED) !== -1) {
1023+
return false;
1024+
}
1025+
return true;
1026+
});
1027+
1028+
if (files.length === 0) {
1029+
return;
1030+
}
1031+
1032+
const currentGitRoot = Preferences.get("currentGitRoot");
1033+
// addListToWorkingSet ignores files already present in any pane, so this is safe
1034+
// to run repeatedly or with some of the files already open
1035+
const fileList = files.map(function (file) {
1036+
return FileSystem.getFileForPath(currentGitRoot + file.file);
1037+
});
1038+
MainViewManager.addListToWorkingSet(MainViewManager.ACTIVE_PANE, fileList);
1039+
1040+
// if the user is already viewing one of the changed files, we don't switch the file then...
1041+
// if user is viewing a un-changed file, then we switch to the first changed file
1042+
const currentPath = MainViewManager.getCurrentlyViewedPath(MainViewManager.ACTIVE_PANE);
1043+
const viewingChangedFile = _.any(fileList, function (file) {
1044+
return file.fullPath === currentPath;
1045+
});
1046+
if (!viewingChangedFile) {
1047+
CommandManager.execute(Commands.FILE_OPEN, { fullPath: fileList[0].fullPath });
1048+
}
1049+
}).catch(function (err) {
1050+
ErrorHandler.showError(err, Strings.ERROR_OPENING_CHANGED_FILES);
1051+
});
1052+
}
1053+
10101054
var lastCheckOneClicked = null;
10111055

10121056
function attachDefaultTableHandlers() {
@@ -1345,6 +1389,8 @@ define(function (require, exports) {
13451389
CommandManager.register(Strings.VIEW_AUTHORS_SELECTION, Constants.CMD_GIT_AUTHORS_OF_SELECTION, handleAuthorsSelection);
13461390
CommandManager.register(Strings.VIEW_AUTHORS_FILE, Constants.CMD_GIT_AUTHORS_OF_FILE, handleAuthorsFile);
13471391
CommandManager.register(Strings.HIDE_UNTRACKED, Constants.CMD_GIT_TOGGLE_UNTRACKED, handleToggleUntracked);
1392+
CommandManager.register(Strings.CMD_OPEN_CHANGED_FILES,
1393+
Constants.CMD_GIT_OPEN_CHANGED_FILES, openAllChangedFiles);
13481394
CommandManager.register(Strings.GIT_INIT, Constants.CMD_GIT_INIT, EventEmitter.getEmitter(Events.HANDLE_GIT_INIT));
13491395
CommandManager.register(Strings.GIT_CLONE, Constants.CMD_GIT_CLONE, EventEmitter.getEmitter(Events.HANDLE_GIT_CLONE));
13501396
CommandManager.register(Strings.GIT_SHOW_HISTORY, Constants.CMD_GIT_HISTORY_GLOBAL, ()=>{

src/nls/root/strings.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2248,6 +2248,7 @@ define({
22482248
"TAG_NAME_PLACEHOLDER": "Enter tag name here\u2026",
22492249
"TAG_NAME": "Tag",
22502250
"CMD_CLOSE_UNMODIFIED": "Close Unmodified Files",
2251+
"CMD_OPEN_CHANGED_FILES": "Open All Changed Files",
22512252
"FILE_ADDED": "New file",
22522253
"FILE_COPIED": "Copied",
22532254
"FILE_DELETED": "Deleted",
@@ -2278,6 +2279,7 @@ define({
22782279
"ERROR_PARSING_BRANCH_NAME": "Failed parsing branch name from {0}",
22792280
"ERROR_READING_GIT_STATE": "Reading .git state failed",
22802281
"ERROR_GETTING_DELETED_FILES": "Getting list of deleted files failed",
2282+
"ERROR_OPENING_CHANGED_FILES": "Opening changed files failed",
22812283
"ERROR_SWITCHING_BRANCHES": "Switching branches failed",
22822284
"ERROR_GETTING_CURRENT_BRANCH": "Getting current branch name failed",
22832285
"ERROR_REBASE_FAILED": "Rebase failed",

0 commit comments

Comments
 (0)