From ff723633084006756b2fa42febfd06bd5fa6cf54 Mon Sep 17 00:00:00 2001 From: Constantine Plotnikov Date: Thu, 1 Oct 2009 15:38:50 +0400 Subject: [PATCH] git4idea: Fixed crlf in plugin files --- .../src/git4idea/i18n/GitBundle.properties | 818 ++++++++++----------- .../update/GitUpdateLocallyModifiedDialog.java | 384 +++++----- 2 files changed, 601 insertions(+), 601 deletions(-) diff --git a/plugins/git4idea/src/git4idea/i18n/GitBundle.properties b/plugins/git4idea/src/git4idea/i18n/GitBundle.properties index a36ceb5c42..0f000c6e70 100644 --- a/plugins/git4idea/src/git4idea/i18n/GitBundle.properties +++ b/plugins/git4idea/src/git4idea/i18n/GitBundle.properties @@ -1,409 +1,409 @@ -action.text.show.all.submitted=Show all files changed by this commit -add.action.name=Add -addrefspec.button=Add -addrefspec.get.references.tooltip=Get remote tag and branch references (depending on checkbox state). -addrefspec.get.references=&Get References -addrefspec.getting.references.title=Getting remote references for {0} -addrefspec.include.branches.tooltip=The next update references wil retrieve remote branches. -addrefspec.include.branches=Include &branches -addrefspec.include.tags.tooltip=The next update references wil retrieve remote tags. -addrefspec.include.tags=Include &tags -addrefspec.node.branches=Branches -addrefspec.node.tags=Tags -addrefspec.reference.chooser.tooltip=Select remote branch and tag references -addrefspec.title=Add Reference(s) -annotate.action.name=Annotate -annotation.tool.tip=commit {0}\nAuthor: {1}\nDate: {2}\n\n{3} -checking.out=Checkout {0} -checkout.action.name=Checkout -checkout.branch.label=&Checkout -checkout.branch.name.exists=Branch with the same name exists. Use override option to force branch creation. -checkout.branch=Checkout -checkout.create.ref.log.tooltip=If checked the reference log is created for the branch. It allows time based searches. (the option \"-l\") -checkout.create.ref.log=Create ref &log -checkout.include.tags.tooltip=If checked, the combobox will inclue tags names as well as branches. -checkout.include.tags=&Include tags -checkout.invalid.new.branch.name=Invalid new branch name -checkout.new.branch.tooltip=Enter name of new branch here. Leave blank if you do not want to create a new branch. -checkout.new.branch=As &new branch -checkout.override.branch=&Override -checkout.override.tooltip=If ckecked a branch will be created even if a branch with the same name already exists. The previous branch will be deleted. -checkout.ref.tooltip=Select branch, tag, or enter commit reference -checkout.retrieving.branches.and.tags=Retrieving branches and tags -checkout.track.branch=&Track branch -checkout.track.tooltip=If checked, the newly created branch will track original branch during pull. -checkout.validate.tooltip=Use this button to validate reference expression if entered manually. -checkout.validate=&Validate -checkout.validation.failed=Source revision validation failed -clone.button=Clone -clone.destination.directory.description=Select a parent directory destination directory for clone -clone.destination.directory.title=Parent Directory -clone.destination.exists.error=The path {0} exists. The Git cannot clone to existing directory. -clone.dir.name=Directory &Name -clone.invalid.origin=The origin name is in invalid format. -clone.invalid.url=Repository URL is a malformed URL or non-existent directory. -clone.origin=&Origin Name -clone.parent.dir=&Parent Directory -clone.parent.missing.error=The parent path {0} must exist. -clone.repository.url=Git &Repository URL -clone.test.failed.error=Repository test has failed. -clone.test.success.message=Connection to repository {0} has been successful. -clone.test.success=Connection successful -clone.test=&Test -clone.testing=Testing repository {0} -clone.title=Clone Repository -clone.url.is.not.directory.error=Repository URL is not a directory. -cloning.repository=Cloning source repository {0} -command.cancelled=The command was cancelled. -commit.action.name=Commit -commit.author.tooltip=Specify a commit author here if it is different from committer. The author should be in the format: Author Name <author@ema.il> -commit.author=&Author: -commit.partial.merge.message=The following files are not included in commit.Perform commit with all files included? -commit.partial.merge.title=Partial Merge Commit -commit.push.changes.tooltip=When this option is enabled, changes are pushed to the server after commit. -commit.push.changes=&Push Changes -common.current.branch.tooltip=The currently checked out branch. -common.current.branch=Current Branch: -common.git.root.tooltip=Select git vcs root -common.git.root=Git &Root: -common.no.active.branch= -computing.annotation=Computing annotation for {0} -current.branch.action.name=CurrentBranch -current.branch.change.tracked=Change Tracked Branch -current.branch.message=Checked out branch: {0} -current.branch.title=Current Branch -current.branch.tracked.branch.none= -current.branch.tracked.branch.tooltip=Select the branch to track -current.branch.tracked.branch=&Branch: -current.branch.tracked.remote.none= -current.branch.tracked.remote.this= -current.branch.tracked.repository.tooltip=Select repository to track -current.branch.tracked.repository=Re&pository: -current.branch.tracked.title=Tracked Branch -debug.git.exec=DEBUG: work-dir: [{0}] exec: [{1}] -delete.action.name=Delete -diff.find.error=Finding revision for diff: {0} -error.dialog.title=Error -error.list.title={0} Error: -error.occurred.during=Error occurred during ''{0}'' -fetch.action.name=Fetch -fetch.button=Fetch -fetch.force.references.update.tooltip=Forces update of branch references for which update is not forced in refrence mapping. -fetch.force.references.update=Force references &update -fetch.remote.label=Re&mote: -fetch.remote.tooltip=Remote name or url for fetch -fetch.tags.label=Fetch &tags: -fetch.tags.policy.all=All -fetch.tags.policy.for.fetched.commits=For fetched commits -fetch.tags.policy.none=None -fetch.tags.tooltip=Select fetched commits policy
  • For fetched commits means tags associated with commits on fetched branches are fetched.
  • All means that all tags and reference commits are fetched
  • None means that no tags are fetched.
-fetch.title=Git Fetch -fetching.tags.title=Updating tags from {0} -fetching.title=Fetching from {0} -find.git.description=Select path to git executable -find.git.error.title=Error Running git -find.git.success.title=Git Executed Successfully -find.git.title=Git Configuration -find.git.unsupported.message={0}
This version is unsupported, and some plugin functionality could fail to work.
The minimal supported version is {1}. -fix.roots.button=Accept -fix.roots.list.tooltip=The suggested list of Git VCS roots, new roots are marked as bold, removed roots are marked as overstriked. -fix.roots.message=The following Git vcs roots will be used instead of the current Git VCS roots. -fix.roots.title=Fix Git VCS Roots -fix.roots.valid.message=The invalid Git roots have been fixed already. -fix.roots.valid.title=All Git Roots Are Valid -getting.history=Getting history for {0} -git.default.commit.message=\n# Brief commit description here\n\n# Full commit description here (comment lines starting with '#' will not be included)\n\n -git.error.exit=The git process exited with the code {0} -git.running=Running: {0} -git.vcs.config.path.label=Path to &git executable: -git.vcs.config.ssh.mode.idea=IDEA ssh -git.vcs.config.ssh.mode.native=Native -git.vcs.config.ssh.mode.tooltip=Specify which version of SSH to be used with git.
  • Native means that the native ssh will be used.
  • IDEA SSH means that the implementation provided by the IDEA will be used.
The native implementation might cause hangups on some platforms. In native case, you also might need to configure ssh-askpass for your platform to recieve GUI promopts for passwords. -git.vcs.config.ssh.mode=&SSH executable: -git.vcs.config.test.label=Test -git.vcs.config.test=&Test -index.file.error=Updating file in the index failed -init.add.root.message=Do you want to add this directory as vcs root? -init.add.root.title=Git Init -init.destination.directory.description=Select directory where the new Git repository will be created. -init.destination.directory.title=Select directory for git init -init.error.already.under.git=The selected directory {0} is already under git. The submodules are not yet supported. -init.error.title=git init Error -merge.action.name=Merge -merge.add.log.information.tooltip=Add log information to the commit message (\"--log\" option) -merge.add.log.information=Add &log information -merge.branch.button=Merge -merge.branch.message=Select branch to merge into this one ({0}) -merge.branch.title=Merge Branches -merge.branches.tooltip=The chooser for braches. Select one or more braches to merge (already merged branches are not shown). -merge.branches=&Branches to merge: -merge.commit.message.tooltip=The commit message to use in case if merge results in commit (\"-m\" option) -merge.commit.message=Commit &Message -merge.default.strategy= -merge.is.not.needed=Merge is not needed for the file {0} -merge.load.files=Loading files for merge -merge.no.commit.tooltip=Force no commit for merge (the \"--no-commit\" option) -merge.no.commit=No &commit -merge.no.fast.forward.tooltip=Disable fast forward (\"--no-ff\" option) -merge.no.fast.forward=No &fast forward -merge.retrieving.branches=Retrieving unmerged branches -merge.squash.commit=S&quash commit -merge.squash.tooltip=Squash all changes into the single commit (\"--squash\" option) -merge.strategy.tooltip=The merge strategy to use (\"-s\" option) -merge.strategy=&Strategy: -merge.tool.action.name=MergeTool -merge.tool.column.status.deleted=Deleted -merge.tool.column.status.modified=Modified -merge.tool.column.theirs.status=Theirs -merge.tool.column.yours.status=Yours -merging.branch=Merging branch {0} -merging.title=Merging changes to {0} -paths.affected.title=Paths affected in commit {0} -pull.action.name=Pull -pull.button=Pull -pull.force.reference.update=Force reference &update -pull.get.branches.tooltip=Get branch names from remote repository. Otherwise a locally cached information is used. -pull.get.branches=&Get Branches -pull.getting.remote.branches=Getting remote branches -pull.remote.tooltip=Registered remote name or URL. -pull.remote=Re&mote: -pull.retrieving.remotes=Retrieving remotes -pull.title=Pull changes -pull.url.message=Enter remote repository URL to pull/merge (empty for default): -pull.url.title=Pull URL -pulling.title=Pulling changes from {0} -push.action.name=Push -push.branches.tooltip=Select branches to push -push.branches=&Branches: -push.button=Push -push.force.update.tooltip=If selected remote ref is updated even if they are is not an ancestor of the local ref. -push.force.update=&Force update -push.policy.all=All -push.policy.default=Default -push.policy.mirror=Mirror -push.policy.selected=Selected branches -push.policy.tooltip=Select push policy:
  • Default - the push is done according to the configuration of the remote.
  • Selected branches - selected branches are pushed.
  • All - all references under refs/heads are pushed.
  • Mirror - all references under refs/ are pushed including tags and remotes.
-push.policy=&Push: -push.remote.tooltip=Specify remote repository URL or remote name where to push changes. -push.remote=Re&mote: -push.show.tags.tooltip=If selected, the tags are shown in branch chooser as well. -push.show.tags=Show ta&gs -push.tags.tooltip=All tag refereneces are pushed in addition to references specified in references section. -push.tags=Push &tags -push.title=Push Changes -push.use.thin.pack.tooltip=If this option is selected, the push will spend extra CPU cycles to minimize amount of data transferred (use it for slow connections) -push.use.thin.pack=&Use thin pack -pushing.all.changes=Pushing all commited changes, refs & tags to remote repos -rebase.abort.action.name=Abort Rebasing -rebase.action.error=Git Rebase Error -rebase.action.message=Mulitple git roots have unfinished rebase process, please select root to perform action on. -rebase.action.name=Rebase -rebase.action.no.root=There is no rebase operation in progress in the project -rebase.branch.tooltip=Select branch to rebase (if branch is different from the current branch, it will be checked out first) -rebase.branch=&Branch: -rebase.button=Rebase -rebase.continue.action.name=Continue Rebasing -rebase.editor.action.column=Action -rebase.editor.button=Start Rebasing -rebase.editor.comment.column=Comment -rebase.editor.commit.column=Commit -rebase.editor.invalid.entryset=No commits found to rebase -rebase.editor.invalid.squash=The first non-skip commint could not be marked as squashed since squash merges commit with the previous commit. -rebase.editor.message=Reorder and edit &rebased commits -rebase.editor.move.down.tooltip=Move commit down (commit will be applied later) -rebase.editor.move.down=Move &Down -rebase.editor.move.up.tooltip=Move commit up in the list (commit will be applied earlier) -rebase.editor.move.up=Move &Up -rebase.editor.title=Rebasing commits -rebase.editor.view.tooltip=View commit contents -rebase.editor.view=&View -rebase.from.tooltip=Sepecify actual base for the branch. Leave blank to onto. -rebase.from=&From: -rebase.in.progress=Interactive rebase has been already started for this git root. -rebase.interactive.tooltip=If selected, the interactive rebase will be preformed. -rebase.interactive=&Interactive -rebase.invalid.from=\"From\" reference expression is invalid. -rebase.invalid.onto=\"Onto\" reference expression is invalid. -rebase.merge.strategy.tooltip=Select merge strategy to use -rebase.merge.strategy=Merge &Strategy: -rebase.no.merge.tooltip=If selected, no merge strategies will be applied during the rebase. -rebase.no.merge=&Do not use merge strategies -rebase.onto.tooltip=The reference that will become a new base for selected branch. -rebase.onto.validate=&Validate -rebase.onto=&Onto: -rebase.preserve.merges.tooltip=Preserve merges during rebease instead of squashing them. -rebase.preserve.merges=&Preserve Merges -rebase.result.amend.title=Rebase Suspended -rebase.result.amend=Stopped for amending commit while rebasing ({0}/{1}).\nAmmed commit and continue the rebase process. -rebase.result.cancelled.title=Rebase Cancelled -rebase.result.cancelled=The rebase process was cancelled. -rebase.result.conflict.title=Rebase Suspended -rebase.result.conflict=Stopped rebasing because of conflict ({0}/{1}).\nResolve conflicts and continue the rebase process. -rebase.result.error.title=Rebase Error -rebase.result.error=Stopped rebasing because of error while rebasing ({0}/{1}).\nCheck vcs console for details. -rebase.show.remote.branches.tooltip=If selected, remote branches are shown in drop down as well. -rebase.show.remote.branches=Show Re&mote Branches -rebase.show.tags.tooltip=Show tags in \"from\" and \"onto\" dropdowns. -rebase.skip.action.name=Skip Commit in Rebasing -rebase.title=Rebase branch -rebase.unstructured.editor.button=Resume Rebasing -rebase.unstructured.editor.git.root=Git Root: -rebase.unstructured.editor.message=Git rebase operation requested additional &information through the editor: -rebase.unstructured.editor.title=Addtional Rebase Input -rebase.unstructured.editor.tooltip=Edit this text according to instructions provided inline -rebase.valdate.onto.tooltip=Valdate "onto" reference. -rebase.validate.from.tooltip=Validate \"from\" reference -rebase.validate.from=Va&lidate -rebasing.title=Rebasing... -refspec.add.all.branches.tooltip=Add refspec that maps all remote branches by glob spec. -refspec.add.all.branches=Add A&ll Branches -refspec.add.all.tags.tooltip=Adds mapping entry for all tags -refspec.add.all.tags=Add All Ta&gs -refspec.add.ref.tooltip=Add branch or tag by name -refspec.add.ref=&Add... -refspec.branch.prefix.tooltip=Specify default branch prefix for the mapping. -refspec.branch.prefix=Remote &Name: -refspec.column.force=Force -refspec.column.local=Local -refspec.column.remote=Remote -refspec.default.tooltip=Restore default reference mapping -refspec.default=&Default -refspec.remove.tooltip=Delete refspec entry -refspec.remove=Remo&ve -refspec.title=Reference mapping -refspec.validation.remote.invalid=The invalid local name for remote -refspec.validation.remote.is.blank=The local name for remote is blank -regase.show.tags=Show &tags -repository.action.missing.roots.misconfigured=Neither of configured git roots are is under git. The configured directory or some of its ancestors must have ".git" directory in it. -repository.action.missing.roots.title=No git roots -repository.action.missing.roots.unconfigured.message=No git roots are configured for the project. -reset.action.name=Reset Head ... -reset.button=Reset -reset.commit.invalid=The specified commit expression did not pass validation. -reset.commit.label=To &Commit: -reset.commit.tooltip=The commit that will become the current HEAD\n as result of reset operation. -reset.title=Reset Head -reset.type.hard=Hard -reset.type.mixed=Mixed -reset.type.soft=Soft -reset.type.tooltip=The reset type (see also git reset man page):
  • Mixed resets index but not working tree
  • Soft leaves index and working tree, just moves head pointer
  • Hard resets index and working tree.Changes in the working tree will be lost
-reset.type=Reset &Type: -reset.validate.tooltip=Validate the commit pointer and check the content of referenced commit. -reset.validate=&Validate -resetting.title=Resetting HEAD... -revert.action.name=Revert -revision.graph=RevisionGraph -root.tracker.message=Some configured Git VCS roots are not under Git or have Git repositories in subdirectories without configured VCS root. -select.branch.to.checkout=Select branch to checkout -show.all.paths.affected.action.name=Show All Affected Paths -ssh.ask.passphrase.title=SSH Key Passphrase -ssh.askPassphrase.message=Please enter passphrase for the private key {0} (the user name is {1}) -ssh.changed.host.key=The server host key for the host {0}:{1} has changed to {2} (type {3}).\nDo you want to accept the changed key? -ssh.confirm.key.titile=Confirm SSH Server Key -ssh.error.title=Authentication error -ssh.keyboard.interactive.title=SSH Keyboard Interactive: {0} -ssh.keyboard.interactive.username=Username: -ssh.new.host.key=Connecting to a new host {0}:{1} that has the key {2} (type {3}).\nDo you want to add this host to known hosts database? -ssh.password.message=Please enter password for user {0} -ssh.password.title=SSH Password Login -sshmain.failed.to.verify.key=Failed to verify key: {0} -sshmain.forwarding.failed=Forwarding {0} failed: {1} -sshmain.invald.host.key=Invald host key {0} {1} -sshmain.invalid.amount.of.arguments=Invalid amount of arguments: {0} -sshmain.invalidpassphrase=Invalid passphrase for the key {0} -sshmain.keyboard.interactive.failed=Keyboard interactive authentication failed. -sshmain.password.failed=Invalid user or password. -sshmain.pk.authenitication.failed=Authentication using key {0} failed. -sshmain.too.mush.passphrase.guesses=Invalid passphrase for the key {0}({1} attempts) -stash.action.name=Stash -stash.button=Create Stash -stash.keep.index.tooltip=If this checkbox is selected, indexed changes are kept in the index. -stash.keep.index=Keep &index -stash.message.tooltip=Enter stash message here. -stash.message=&Message: -stash.title=Stash -stashing.title=Stashing changes... -tag.action.name=Tag -tag.button=Create Tag -tag.commit.label=&Commit: -tag.commit.tooltip=Enter name of commit or object to tag or leave blank to use HEAD. -tag.error.creating.message.file.message=Unable to create message file: {0} -tag.error.creating.message.file.title=Error creating message file -tag.error.invalid.commit=The commit or object name is invalid. -tag.error.tag.exists=The tag with the same name exists. -tag.force.tooltip=Force creation of the text even if tag with such name already exists. -tag.force=&Force -tag.getting.existing.tags=Getting existing tags... -tag.message.label=&Message: -tag.message.tooltip=If the message is not empty, an annotated tag is created. -tag.message=Specify tag name: -tag.name.label=Tag &Name: -tag.name.tooltip=Enter the new tag name here. -tag.nonvcs.error.message=ERROR: Files not tagged, not all are under VCS root! -tag.nonvcs.error.title=Tag Result -tag.title=Tag -tag.validate.tooltip=Click this button to the validate commit to be tagged. -tag.validate=&Validate -tagging.title=Tagging files... -unindexed.files.changlelist.name=Unindexed Files -unstash.action.name=UnStash -unstash.branch.label\:=As new &branch: -unstash.branch.tooltip=If non-empty name is entered, the stash is checked out as a new branch. -unstash.button.apply=Apply Stash -unstash.button.branch=Branch -unstash.button.pop=Pop Stash -unstash.clear.tooltip=Delete all stashes in the repository. -unstash.clear=&Clear -unstash.clearing.stashes=Clearing stashes... -unstash.drop.tooltip=Delete selected stash -unstash.drop=&Drop -unstash.dropping.stash=Dropping stash {0}... -unstash.error.branch.exists=The specified branch already exists -unstash.error.invalid.branch.name=Invalid branch name -unstash.pop.stash.tooltip=If selected the stash is dropped after it is applied. -unstash.pop.stash=&Pop stash -unstash.reinstate.index.tooltip=Attempt to reinstate index as well as working tree changes. -unstash.reinstate.index=Reinstate &index -unstash.stashes.item={0}:{1}:{2} -unstash.stashes.tooltip=Select a stash to operate for. -unstash.stashes=&Stashes: -unstash.title=UnStash Changes -unstash.view.tooltip=View selected stash -unstash.view=&View -unstashing.title=UnStashing changes... -update.locally.modified.files.tooltip=The list of files that are considered to be locally modified. -update.locally.modified.files=&Files: -update.locally.modified.git.root=Git Root: -update.locally.modified.message=The following files under this root are locally modified.
Likely there is a problem with crlf conversion
or IDEA managed to save a configuration file,
and these changes should be just reverted. -update.locally.modified.rescan.tooltip=Rescan directory to check if there are still locally modified files.
Use this button if you have resolved problem manually. -update.locally.modified.rescan=Re&scan -update.locally.modified.revert=Revert Files -update.locally.modified.title=Locally modified files are detected -update.options.display.name=Git Update Settings -update.options.no.commit=No &Commit -update.options.stash.tooltip=If selected, the current changes will be stashed before update, and than restored after update. -update.options.stash=&Stash changes before update -update.options.type.default=Branch Default -update.options.type.merge=Force Merge -update.options.type.rebase=Force Rebase -update.options.type.tooltip=Force update type (merge or rebase) or use branch default configuration -update.options.type=&Type: -update.rebase.no.change.cancel=Cancel Update -update.rebase.no.change.retry=Retry Continue -update.rebase.no.change.skip=Skip Commit -update.rebase.no.change.title=No Changes Staged -update.rebase.no.change=No changes detected {0}.
  • Skip Commit - skips current commit in the rebase process
  • Retry Continue - do it after you add changes to commit manually
  • Or cancel cancels update process for this root.
-update.rebase.unmerged.title=Unresolved Rebase Conflicts -update.rebase.unmerged={0} file(s) are not yet merged. Repeat merge operation (no cancels update for root {1}? -util.remote.renderer.default={0}({1}) -util.remote.renderer.none=None -util.remote.renderer.normal={0}({1}) -util.remote.renderer.self=Current repository -vcs.unable.to.run.git=Unable to run git: {0} ({1}) -vcs.unsupported.version=Unsupported version of git configured: {0}. The minimal supported version is {1} -vfs.listener.add.single.prompt=Do you want to add the following file to Git?\n{0}\n\nIf you say NO, you can still add it later manually. -vfs.listener.add.single.title=Add file to Git -vfs.listener.add.title=Add files to Git -vfs.listener.delete.single.prompt=Do you want to delete the following file from Git?\n{0}\n\nIf you say NO, you can still delete it later manually. -vfs.listener.delete.single.title=Delete file from Git -vfs.listener.delete.title=Delete files from Git +action.text.show.all.submitted=Show all files changed by this commit +add.action.name=Add +addrefspec.button=Add +addrefspec.get.references.tooltip=Get remote tag and branch references (depending on checkbox state). +addrefspec.get.references=&Get References +addrefspec.getting.references.title=Getting remote references for {0} +addrefspec.include.branches.tooltip=The next update references wil retrieve remote branches. +addrefspec.include.branches=Include &branches +addrefspec.include.tags.tooltip=The next update references wil retrieve remote tags. +addrefspec.include.tags=Include &tags +addrefspec.node.branches=Branches +addrefspec.node.tags=Tags +addrefspec.reference.chooser.tooltip=Select remote branch and tag references +addrefspec.title=Add Reference(s) +annotate.action.name=Annotate +annotation.tool.tip=commit {0}\nAuthor: {1}\nDate: {2}\n\n{3} +checking.out=Checkout {0} +checkout.action.name=Checkout +checkout.branch.label=&Checkout +checkout.branch.name.exists=Branch with the same name exists. Use override option to force branch creation. +checkout.branch=Checkout +checkout.create.ref.log.tooltip=If checked the reference log is created for the branch. It allows time based searches. (the option \"-l\") +checkout.create.ref.log=Create ref &log +checkout.include.tags.tooltip=If checked, the combobox will inclue tags names as well as branches. +checkout.include.tags=&Include tags +checkout.invalid.new.branch.name=Invalid new branch name +checkout.new.branch.tooltip=Enter name of new branch here. Leave blank if you do not want to create a new branch. +checkout.new.branch=As &new branch +checkout.override.branch=&Override +checkout.override.tooltip=If ckecked a branch will be created even if a branch with the same name already exists. The previous branch will be deleted. +checkout.ref.tooltip=Select branch, tag, or enter commit reference +checkout.retrieving.branches.and.tags=Retrieving branches and tags +checkout.track.branch=&Track branch +checkout.track.tooltip=If checked, the newly created branch will track original branch during pull. +checkout.validate.tooltip=Use this button to validate reference expression if entered manually. +checkout.validate=&Validate +checkout.validation.failed=Source revision validation failed +clone.button=Clone +clone.destination.directory.description=Select a parent directory destination directory for clone +clone.destination.directory.title=Parent Directory +clone.destination.exists.error=The path {0} exists. The Git cannot clone to existing directory. +clone.dir.name=Directory &Name +clone.invalid.origin=The origin name is in invalid format. +clone.invalid.url=Repository URL is a malformed URL or non-existent directory. +clone.origin=&Origin Name +clone.parent.dir=&Parent Directory +clone.parent.missing.error=The parent path {0} must exist. +clone.repository.url=Git &Repository URL +clone.test.failed.error=Repository test has failed. +clone.test.success.message=Connection to repository {0} has been successful. +clone.test.success=Connection successful +clone.test=&Test +clone.testing=Testing repository {0} +clone.title=Clone Repository +clone.url.is.not.directory.error=Repository URL is not a directory. +cloning.repository=Cloning source repository {0} +command.cancelled=The command was cancelled. +commit.action.name=Commit +commit.author.tooltip=Specify a commit author here if it is different from committer. The author should be in the format: Author Name <author@ema.il> +commit.author=&Author: +commit.partial.merge.message=The following files are not included in commit.
    {0}
Perform commit with all files included? +commit.partial.merge.title=Partial Merge Commit +commit.push.changes.tooltip=When this option is enabled, changes are pushed to the server after commit. +commit.push.changes=&Push Changes +common.current.branch.tooltip=The currently checked out branch. +common.current.branch=Current Branch: +common.git.root.tooltip=Select git vcs root +common.git.root=Git &Root: +common.no.active.branch= +computing.annotation=Computing annotation for {0} +current.branch.action.name=CurrentBranch +current.branch.change.tracked=Change Tracked Branch +current.branch.message=Checked out branch: {0} +current.branch.title=Current Branch +current.branch.tracked.branch.none= +current.branch.tracked.branch.tooltip=Select the branch to track +current.branch.tracked.branch=&Branch: +current.branch.tracked.remote.none= +current.branch.tracked.remote.this= +current.branch.tracked.repository.tooltip=Select repository to track +current.branch.tracked.repository=Re&pository: +current.branch.tracked.title=Tracked Branch +debug.git.exec=DEBUG: work-dir: [{0}] exec: [{1}] +delete.action.name=Delete +diff.find.error=Finding revision for diff: {0} +error.dialog.title=Error +error.list.title={0} Error: +error.occurred.during=Error occurred during ''{0}'' +fetch.action.name=Fetch +fetch.button=Fetch +fetch.force.references.update.tooltip=Forces update of branch references for which update is not forced in refrence mapping. +fetch.force.references.update=Force references &update +fetch.remote.label=Re&mote: +fetch.remote.tooltip=Remote name or url for fetch +fetch.tags.label=Fetch &tags: +fetch.tags.policy.all=All +fetch.tags.policy.for.fetched.commits=For fetched commits +fetch.tags.policy.none=None +fetch.tags.tooltip=Select fetched commits policy
  • For fetched commits means tags associated with commits on fetched branches are fetched.
  • All means that all tags and reference commits are fetched
  • None means that no tags are fetched.
+fetch.title=Git Fetch +fetching.tags.title=Updating tags from {0} +fetching.title=Fetching from {0} +find.git.description=Select path to git executable +find.git.error.title=Error Running git +find.git.success.title=Git Executed Successfully +find.git.title=Git Configuration +find.git.unsupported.message={0}
This version is unsupported, and some plugin functionality could fail to work.
The minimal supported version is {1}. +fix.roots.button=Accept +fix.roots.list.tooltip=The suggested list of Git VCS roots, new roots are marked as bold, removed roots are marked as overstriked. +fix.roots.message=The following Git vcs roots will be used instead of the current Git VCS roots. +fix.roots.title=Fix Git VCS Roots +fix.roots.valid.message=The invalid Git roots have been fixed already. +fix.roots.valid.title=All Git Roots Are Valid +getting.history=Getting history for {0} +git.default.commit.message=\n# Brief commit description here\n\n# Full commit description here (comment lines starting with '#' will not be included)\n\n +git.error.exit=The git process exited with the code {0} +git.running=Running: {0} +git.vcs.config.path.label=Path to &git executable: +git.vcs.config.ssh.mode.idea=IDEA ssh +git.vcs.config.ssh.mode.native=Native +git.vcs.config.ssh.mode.tooltip=Specify which version of SSH to be used with git.
  • Native means that the native ssh will be used.
  • IDEA SSH means that the implementation provided by the IDEA will be used.
The native implementation might cause hangups on some platforms. In native case, you also might need to configure ssh-askpass for your platform to recieve GUI promopts for passwords. +git.vcs.config.ssh.mode=&SSH executable: +git.vcs.config.test.label=Test +git.vcs.config.test=&Test +index.file.error=Updating file in the index failed +init.add.root.message=Do you want to add this directory as vcs root? +init.add.root.title=Git Init +init.destination.directory.description=Select directory where the new Git repository will be created. +init.destination.directory.title=Select directory for git init +init.error.already.under.git=The selected directory {0} is already under git. The submodules are not yet supported. +init.error.title=git init Error +merge.action.name=Merge +merge.add.log.information.tooltip=Add log information to the commit message (\"--log\" option) +merge.add.log.information=Add &log information +merge.branch.button=Merge +merge.branch.message=Select branch to merge into this one ({0}) +merge.branch.title=Merge Branches +merge.branches.tooltip=The chooser for braches. Select one or more braches to merge (already merged branches are not shown). +merge.branches=&Branches to merge: +merge.commit.message.tooltip=The commit message to use in case if merge results in commit (\"-m\" option) +merge.commit.message=Commit &Message +merge.default.strategy= +merge.is.not.needed=Merge is not needed for the file {0} +merge.load.files=Loading files for merge +merge.no.commit.tooltip=Force no commit for merge (the \"--no-commit\" option) +merge.no.commit=No &commit +merge.no.fast.forward.tooltip=Disable fast forward (\"--no-ff\" option) +merge.no.fast.forward=No &fast forward +merge.retrieving.branches=Retrieving unmerged branches +merge.squash.commit=S&quash commit +merge.squash.tooltip=Squash all changes into the single commit (\"--squash\" option) +merge.strategy.tooltip=The merge strategy to use (\"-s\" option) +merge.strategy=&Strategy: +merge.tool.action.name=MergeTool +merge.tool.column.status.deleted=Deleted +merge.tool.column.status.modified=Modified +merge.tool.column.theirs.status=Theirs +merge.tool.column.yours.status=Yours +merging.branch=Merging branch {0} +merging.title=Merging changes to {0} +paths.affected.title=Paths affected in commit {0} +pull.action.name=Pull +pull.button=Pull +pull.force.reference.update=Force reference &update +pull.get.branches.tooltip=Get branch names from remote repository. Otherwise a locally cached information is used. +pull.get.branches=&Get Branches +pull.getting.remote.branches=Getting remote branches +pull.remote.tooltip=Registered remote name or URL. +pull.remote=Re&mote: +pull.retrieving.remotes=Retrieving remotes +pull.title=Pull changes +pull.url.message=Enter remote repository URL to pull/merge (empty for default): +pull.url.title=Pull URL +pulling.title=Pulling changes from {0} +push.action.name=Push +push.branches.tooltip=Select branches to push +push.branches=&Branches: +push.button=Push +push.force.update.tooltip=If selected remote ref is updated even if they are is not an ancestor of the local ref. +push.force.update=&Force update +push.policy.all=All +push.policy.default=Default +push.policy.mirror=Mirror +push.policy.selected=Selected branches +push.policy.tooltip=Select push policy:
  • Default - the push is done according to the configuration of the remote.
  • Selected branches - selected branches are pushed.
  • All - all references under refs/heads are pushed.
  • Mirror - all references under refs/ are pushed including tags and remotes.
+push.policy=&Push: +push.remote.tooltip=Specify remote repository URL or remote name where to push changes. +push.remote=Re&mote: +push.show.tags.tooltip=If selected, the tags are shown in branch chooser as well. +push.show.tags=Show ta&gs +push.tags.tooltip=All tag refereneces are pushed in addition to references specified in references section. +push.tags=Push &tags +push.title=Push Changes +push.use.thin.pack.tooltip=If this option is selected, the push will spend extra CPU cycles to minimize amount of data transferred (use it for slow connections) +push.use.thin.pack=&Use thin pack +pushing.all.changes=Pushing all commited changes, refs & tags to remote repos +rebase.abort.action.name=Abort Rebasing +rebase.action.error=Git Rebase Error +rebase.action.message=Mulitple git roots have unfinished rebase process, please select root to perform action on. +rebase.action.name=Rebase +rebase.action.no.root=There is no rebase operation in progress in the project +rebase.branch.tooltip=Select branch to rebase (if branch is different from the current branch, it will be checked out first) +rebase.branch=&Branch: +rebase.button=Rebase +rebase.continue.action.name=Continue Rebasing +rebase.editor.action.column=Action +rebase.editor.button=Start Rebasing +rebase.editor.comment.column=Comment +rebase.editor.commit.column=Commit +rebase.editor.invalid.entryset=No commits found to rebase +rebase.editor.invalid.squash=The first non-skip commint could not be marked as squashed since squash merges commit with the previous commit. +rebase.editor.message=Reorder and edit &rebased commits +rebase.editor.move.down.tooltip=Move commit down (commit will be applied later) +rebase.editor.move.down=Move &Down +rebase.editor.move.up.tooltip=Move commit up in the list (commit will be applied earlier) +rebase.editor.move.up=Move &Up +rebase.editor.title=Rebasing commits +rebase.editor.view.tooltip=View commit contents +rebase.editor.view=&View +rebase.from.tooltip=Sepecify actual base for the branch. Leave blank to onto. +rebase.from=&From: +rebase.in.progress=Interactive rebase has been already started for this git root. +rebase.interactive.tooltip=If selected, the interactive rebase will be preformed. +rebase.interactive=&Interactive +rebase.invalid.from=\"From\" reference expression is invalid. +rebase.invalid.onto=\"Onto\" reference expression is invalid. +rebase.merge.strategy.tooltip=Select merge strategy to use +rebase.merge.strategy=Merge &Strategy: +rebase.no.merge.tooltip=If selected, no merge strategies will be applied during the rebase. +rebase.no.merge=&Do not use merge strategies +rebase.onto.tooltip=The reference that will become a new base for selected branch. +rebase.onto.validate=&Validate +rebase.onto=&Onto: +rebase.preserve.merges.tooltip=Preserve merges during rebease instead of squashing them. +rebase.preserve.merges=&Preserve Merges +rebase.result.amend.title=Rebase Suspended +rebase.result.amend=Stopped for amending commit while rebasing ({0}/{1}).\nAmmed commit and continue the rebase process. +rebase.result.cancelled.title=Rebase Cancelled +rebase.result.cancelled=The rebase process was cancelled. +rebase.result.conflict.title=Rebase Suspended +rebase.result.conflict=Stopped rebasing because of conflict ({0}/{1}).\nResolve conflicts and continue the rebase process. +rebase.result.error.title=Rebase Error +rebase.result.error=Stopped rebasing because of error while rebasing ({0}/{1}).\nCheck vcs console for details. +rebase.show.remote.branches.tooltip=If selected, remote branches are shown in drop down as well. +rebase.show.remote.branches=Show Re&mote Branches +rebase.show.tags.tooltip=Show tags in \"from\" and \"onto\" dropdowns. +rebase.skip.action.name=Skip Commit in Rebasing +rebase.title=Rebase branch +rebase.unstructured.editor.button=Resume Rebasing +rebase.unstructured.editor.git.root=Git Root: +rebase.unstructured.editor.message=Git rebase operation requested additional &information through the editor: +rebase.unstructured.editor.title=Addtional Rebase Input +rebase.unstructured.editor.tooltip=Edit this text according to instructions provided inline +rebase.valdate.onto.tooltip=Valdate "onto" reference. +rebase.validate.from.tooltip=Validate \"from\" reference +rebase.validate.from=Va&lidate +rebasing.title=Rebasing... +refspec.add.all.branches.tooltip=Add refspec that maps all remote branches by glob spec. +refspec.add.all.branches=Add A&ll Branches +refspec.add.all.tags.tooltip=Adds mapping entry for all tags +refspec.add.all.tags=Add All Ta&gs +refspec.add.ref.tooltip=Add branch or tag by name +refspec.add.ref=&Add... +refspec.branch.prefix.tooltip=Specify default branch prefix for the mapping. +refspec.branch.prefix=Remote &Name: +refspec.column.force=Force +refspec.column.local=Local +refspec.column.remote=Remote +refspec.default.tooltip=Restore default reference mapping +refspec.default=&Default +refspec.remove.tooltip=Delete refspec entry +refspec.remove=Remo&ve +refspec.title=Reference mapping +refspec.validation.remote.invalid=The invalid local name for remote +refspec.validation.remote.is.blank=The local name for remote is blank +regase.show.tags=Show &tags +repository.action.missing.roots.misconfigured=Neither of configured git roots are is under git. The configured directory or some of its ancestors must have ".git" directory in it. +repository.action.missing.roots.title=No git roots +repository.action.missing.roots.unconfigured.message=No git roots are configured for the project. +reset.action.name=Reset Head ... +reset.button=Reset +reset.commit.invalid=The specified commit expression did not pass validation. +reset.commit.label=To &Commit: +reset.commit.tooltip=The commit that will become the current HEAD\n as result of reset operation. +reset.title=Reset Head +reset.type.hard=Hard +reset.type.mixed=Mixed +reset.type.soft=Soft +reset.type.tooltip=The reset type (see also git reset man page):
  • Mixed resets index but not working tree
  • Soft leaves index and working tree, just moves head pointer
  • Hard resets index and working tree.Changes in the working tree will be lost
+reset.type=Reset &Type: +reset.validate.tooltip=Validate the commit pointer and check the content of referenced commit. +reset.validate=&Validate +resetting.title=Resetting HEAD... +revert.action.name=Revert +revision.graph=RevisionGraph +root.tracker.message=Some configured Git VCS roots are not under Git or have Git repositories in subdirectories without configured VCS root. +select.branch.to.checkout=Select branch to checkout +show.all.paths.affected.action.name=Show All Affected Paths +ssh.ask.passphrase.title=SSH Key Passphrase +ssh.askPassphrase.message=Please enter passphrase for the private key {0} (the user name is {1}) +ssh.changed.host.key=The server host key for the host {0}:{1} has changed to {2} (type {3}).\nDo you want to accept the changed key? +ssh.confirm.key.titile=Confirm SSH Server Key +ssh.error.title=Authentication error +ssh.keyboard.interactive.title=SSH Keyboard Interactive: {0} +ssh.keyboard.interactive.username=Username: +ssh.new.host.key=Connecting to a new host {0}:{1} that has the key {2} (type {3}).\nDo you want to add this host to known hosts database? +ssh.password.message=Please enter password for user {0} +ssh.password.title=SSH Password Login +sshmain.failed.to.verify.key=Failed to verify key: {0} +sshmain.forwarding.failed=Forwarding {0} failed: {1} +sshmain.invald.host.key=Invald host key {0} {1} +sshmain.invalid.amount.of.arguments=Invalid amount of arguments: {0} +sshmain.invalidpassphrase=Invalid passphrase for the key {0} +sshmain.keyboard.interactive.failed=Keyboard interactive authentication failed. +sshmain.password.failed=Invalid user or password. +sshmain.pk.authenitication.failed=Authentication using key {0} failed. +sshmain.too.mush.passphrase.guesses=Invalid passphrase for the key {0}({1} attempts) +stash.action.name=Stash +stash.button=Create Stash +stash.keep.index.tooltip=If this checkbox is selected, indexed changes are kept in the index. +stash.keep.index=Keep &index +stash.message.tooltip=Enter stash message here. +stash.message=&Message: +stash.title=Stash +stashing.title=Stashing changes... +tag.action.name=Tag +tag.button=Create Tag +tag.commit.label=&Commit: +tag.commit.tooltip=Enter name of commit or object to tag or leave blank to use HEAD. +tag.error.creating.message.file.message=Unable to create message file: {0} +tag.error.creating.message.file.title=Error creating message file +tag.error.invalid.commit=The commit or object name is invalid. +tag.error.tag.exists=The tag with the same name exists. +tag.force.tooltip=Force creation of the text even if tag with such name already exists. +tag.force=&Force +tag.getting.existing.tags=Getting existing tags... +tag.message.label=&Message: +tag.message.tooltip=If the message is not empty, an annotated tag is created. +tag.message=Specify tag name: +tag.name.label=Tag &Name: +tag.name.tooltip=Enter the new tag name here. +tag.nonvcs.error.message=ERROR: Files not tagged, not all are under VCS root! +tag.nonvcs.error.title=Tag Result +tag.title=Tag +tag.validate.tooltip=Click this button to the validate commit to be tagged. +tag.validate=&Validate +tagging.title=Tagging files... +unindexed.files.changlelist.name=Unindexed Files +unstash.action.name=UnStash +unstash.branch.label\:=As new &branch: +unstash.branch.tooltip=If non-empty name is entered, the stash is checked out as a new branch. +unstash.button.apply=Apply Stash +unstash.button.branch=Branch +unstash.button.pop=Pop Stash +unstash.clear.tooltip=Delete all stashes in the repository. +unstash.clear=&Clear +unstash.clearing.stashes=Clearing stashes... +unstash.drop.tooltip=Delete selected stash +unstash.drop=&Drop +unstash.dropping.stash=Dropping stash {0}... +unstash.error.branch.exists=The specified branch already exists +unstash.error.invalid.branch.name=Invalid branch name +unstash.pop.stash.tooltip=If selected the stash is dropped after it is applied. +unstash.pop.stash=&Pop stash +unstash.reinstate.index.tooltip=Attempt to reinstate index as well as working tree changes. +unstash.reinstate.index=Reinstate &index +unstash.stashes.item={0}:{1}:{2} +unstash.stashes.tooltip=Select a stash to operate for. +unstash.stashes=&Stashes: +unstash.title=UnStash Changes +unstash.view.tooltip=View selected stash +unstash.view=&View +unstashing.title=UnStashing changes... +update.locally.modified.files.tooltip=The list of files that are considered to be locally modified. +update.locally.modified.files=&Files: +update.locally.modified.git.root=Git Root: +update.locally.modified.message=The following files under this root are locally modified.
Likely there is a problem with crlf conversion
or IDEA managed to save a configuration file,
and these changes should be just reverted. +update.locally.modified.rescan.tooltip=Rescan directory to check if there are still locally modified files.
Use this button if you have resolved problem manually. +update.locally.modified.rescan=Re&scan +update.locally.modified.revert=Revert Files +update.locally.modified.title=Locally modified files are detected +update.options.display.name=Git Update Settings +update.options.no.commit=No &Commit +update.options.stash.tooltip=If selected, the current changes will be stashed before update, and than restored after update. +update.options.stash=&Stash changes before update +update.options.type.default=Branch Default +update.options.type.merge=Force Merge +update.options.type.rebase=Force Rebase +update.options.type.tooltip=Force update type (merge or rebase) or use branch default configuration +update.options.type=&Type: +update.rebase.no.change.cancel=Cancel Update +update.rebase.no.change.retry=Retry Continue +update.rebase.no.change.skip=Skip Commit +update.rebase.no.change.title=No Changes Staged +update.rebase.no.change=No changes detected {0}.
  • Skip Commit - skips current commit in the rebase process
  • Retry Continue - do it after you add changes to commit manually
  • Or cancel cancels update process for this root.
+update.rebase.unmerged.title=Unresolved Rebase Conflicts +update.rebase.unmerged={0} file(s) are not yet merged. Repeat merge operation (no cancels update for root {1}? +util.remote.renderer.default={0}({1}) +util.remote.renderer.none=None +util.remote.renderer.normal={0}({1}) +util.remote.renderer.self=Current repository +vcs.unable.to.run.git=Unable to run git: {0} ({1}) +vcs.unsupported.version=Unsupported version of git configured: {0}. The minimal supported version is {1} +vfs.listener.add.single.prompt=Do you want to add the following file to Git?\n{0}\n\nIf you say NO, you can still add it later manually. +vfs.listener.add.single.title=Add file to Git +vfs.listener.add.title=Add files to Git +vfs.listener.delete.single.prompt=Do you want to delete the following file from Git?\n{0}\n\nIf you say NO, you can still delete it later manually. +vfs.listener.delete.single.title=Delete file from Git +vfs.listener.delete.title=Delete files from Git diff --git a/plugins/git4idea/src/git4idea/update/GitUpdateLocallyModifiedDialog.java b/plugins/git4idea/src/git4idea/update/GitUpdateLocallyModifiedDialog.java index 9cbee3b9aa..00549bd65e 100644 --- a/plugins/git4idea/src/git4idea/update/GitUpdateLocallyModifiedDialog.java +++ b/plugins/git4idea/src/git4idea/update/GitUpdateLocallyModifiedDialog.java @@ -1,192 +1,192 @@ -package git4idea.update; - -import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.DialogWrapper; -import com.intellij.openapi.vcs.VcsException; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.util.ui.UIUtil; -import com.intellij.vcsUtil.VcsUtil; -import git4idea.GitUtil; -import git4idea.commands.GitHandler; -import git4idea.commands.GitSimpleHandler; -import git4idea.commands.StringScanner; -import git4idea.i18n.GitBundle; -import git4idea.ui.GitUIUtil; - -import javax.swing.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.atomic.AtomicBoolean; - -/** - * The dialog that displays locally modified files during update process - */ -public class GitUpdateLocallyModifiedDialog extends DialogWrapper { - /** - * The rescan button - */ - private JButton myRescanButton; - /** - * The list of files to revert - */ - private JList myFilesList; - /** - * The git root label - */ - private JLabel myGitRoot; - /** - * The root panel - */ - private JPanel myRootPanel; - /** - * The vcs root - */ - private VirtualFile myRoot; - /** - * The collection with locally modified files - */ - private List myLocallyModifiedFiles; - - /** - * The constructor - * @param project the current project - * @param root the vcs root - * @param locallyModifiedFiles the collection of locally modified files to use - */ - protected GitUpdateLocallyModifiedDialog(final Project project, final VirtualFile root, List locallyModifiedFiles) { - super(project, true); - myRoot = root; - myLocallyModifiedFiles = locallyModifiedFiles; - setTitle(GitBundle.getString("update.locally.modified.title")); - myGitRoot.setText(myRoot.getPresentableUrl()); - myFilesList.setModel(new DefaultListModel()); - setOKButtonText(GitBundle.getString("update.locally.modified.revert")); - syncListModel(); - myRescanButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - myLocallyModifiedFiles.clear(); - try { - scanFiles(project, root, myLocallyModifiedFiles); - } - catch (VcsException ex) { - GitUIUtil.showOperationError(project, ex, "Checking for locally modified files"); - } - } - }); - init(); - } - - /** - * Refresh list model according to the current content of the collection - */ - private void syncListModel() { - DefaultListModel listModel = (DefaultListModel)myFilesList.getModel(); - listModel.removeAllElements(); - for(String p : myLocallyModifiedFiles) { - listModel.addElement(p); - } - } - - /** - * {@inheritDoc} - */ - @Override - protected JComponent createCenterPanel() { - return myRootPanel; - } - - /** - * {@inheritDoc} - */ - @Override - protected String getDimensionServiceKey() { - return getClass().getName(); - } - - /** - * Scan working tree and detect locally modified files - * - * @param project the project to scan - * @param root the root to scan - * @param files the collection with files - * @throws VcsException if there problem with running git or working tree is dirty in unsupported way - */ - private static void scanFiles(Project project, VirtualFile root, List files) throws VcsException { - String rootPath = root.getPath(); - GitSimpleHandler h = new GitSimpleHandler(project, root, GitHandler.DIFF); - h.addParameters("--name-status"); - h.setNoSSH(true); - h.setStdoutSuppressed(true); - StringScanner s = new StringScanner(h.run()); - while(s.hasMoreData()) { - if(s.isEol()) { - s.line(); - continue; - } - if(s.tryConsume("M\t")) { - String path = rootPath + "/" + GitUtil.unescapePath(s.line()); - files.add(path); - } else { - throw new VcsException("Working tree is dirty in unsupported way: "+s.line()); - } - } - } - - - /** - * Show the dialog if needed - * - * @param project the project - * @param root the vcs root - * @return true if showing is not needed or operation completed successfully - */ - public static boolean showIfNeeded(final Project project, final VirtualFile root) { - final ArrayList files = new ArrayList(); - try { - scanFiles(project, root, files); - final AtomicBoolean rc = new AtomicBoolean(true); - if(!files.isEmpty()) { - UIUtil.invokeAndWaitIfNeeded(new Runnable() { - public void run() { - GitUpdateLocallyModifiedDialog d = new GitUpdateLocallyModifiedDialog(project, root, files); - d.show(); - rc.set(d.isOK()); - } - }); - if(rc.get()) { - if(!files.isEmpty()) { - revertFiles(project, root, files); - } - } - } - return rc.get(); - } - catch (final VcsException e) { - UIUtil.invokeAndWaitIfNeeded(new Runnable() { - public void run() { - GitUIUtil.showOperationError(project, e, "Checking for locally modified files"); - } - }); - return false; - } - } - - /** - * Revert files from the list - * - * @param project the project - * @param root the vcs root - * @param files the files to revert - */ - private static void revertFiles(Project project, VirtualFile root, ArrayList files) throws VcsException { - GitSimpleHandler h = new GitSimpleHandler(project, root, GitHandler.CHECKOUT); - h.endOptions(); - h.setNoSSH(true); - for(String p : files) { - h.addRelativePaths(VcsUtil.getFilePath(p)); - } - h.run(); - } -} +package git4idea.update; + +import com.intellij.openapi.project.Project; +import com.intellij.openapi.ui.DialogWrapper; +import com.intellij.openapi.vcs.VcsException; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.util.ui.UIUtil; +import com.intellij.vcsUtil.VcsUtil; +import git4idea.GitUtil; +import git4idea.commands.GitHandler; +import git4idea.commands.GitSimpleHandler; +import git4idea.commands.StringScanner; +import git4idea.i18n.GitBundle; +import git4idea.ui.GitUIUtil; + +import javax.swing.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * The dialog that displays locally modified files during update process + */ +public class GitUpdateLocallyModifiedDialog extends DialogWrapper { + /** + * The rescan button + */ + private JButton myRescanButton; + /** + * The list of files to revert + */ + private JList myFilesList; + /** + * The git root label + */ + private JLabel myGitRoot; + /** + * The root panel + */ + private JPanel myRootPanel; + /** + * The vcs root + */ + private VirtualFile myRoot; + /** + * The collection with locally modified files + */ + private List myLocallyModifiedFiles; + + /** + * The constructor + * @param project the current project + * @param root the vcs root + * @param locallyModifiedFiles the collection of locally modified files to use + */ + protected GitUpdateLocallyModifiedDialog(final Project project, final VirtualFile root, List locallyModifiedFiles) { + super(project, true); + myRoot = root; + myLocallyModifiedFiles = locallyModifiedFiles; + setTitle(GitBundle.getString("update.locally.modified.title")); + myGitRoot.setText(myRoot.getPresentableUrl()); + myFilesList.setModel(new DefaultListModel()); + setOKButtonText(GitBundle.getString("update.locally.modified.revert")); + syncListModel(); + myRescanButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + myLocallyModifiedFiles.clear(); + try { + scanFiles(project, root, myLocallyModifiedFiles); + } + catch (VcsException ex) { + GitUIUtil.showOperationError(project, ex, "Checking for locally modified files"); + } + } + }); + init(); + } + + /** + * Refresh list model according to the current content of the collection + */ + private void syncListModel() { + DefaultListModel listModel = (DefaultListModel)myFilesList.getModel(); + listModel.removeAllElements(); + for(String p : myLocallyModifiedFiles) { + listModel.addElement(p); + } + } + + /** + * {@inheritDoc} + */ + @Override + protected JComponent createCenterPanel() { + return myRootPanel; + } + + /** + * {@inheritDoc} + */ + @Override + protected String getDimensionServiceKey() { + return getClass().getName(); + } + + /** + * Scan working tree and detect locally modified files + * + * @param project the project to scan + * @param root the root to scan + * @param files the collection with files + * @throws VcsException if there problem with running git or working tree is dirty in unsupported way + */ + private static void scanFiles(Project project, VirtualFile root, List files) throws VcsException { + String rootPath = root.getPath(); + GitSimpleHandler h = new GitSimpleHandler(project, root, GitHandler.DIFF); + h.addParameters("--name-status"); + h.setNoSSH(true); + h.setStdoutSuppressed(true); + StringScanner s = new StringScanner(h.run()); + while(s.hasMoreData()) { + if(s.isEol()) { + s.line(); + continue; + } + if(s.tryConsume("M\t")) { + String path = rootPath + "/" + GitUtil.unescapePath(s.line()); + files.add(path); + } else { + throw new VcsException("Working tree is dirty in unsupported way: "+s.line()); + } + } + } + + + /** + * Show the dialog if needed + * + * @param project the project + * @param root the vcs root + * @return true if showing is not needed or operation completed successfully + */ + public static boolean showIfNeeded(final Project project, final VirtualFile root) { + final ArrayList files = new ArrayList(); + try { + scanFiles(project, root, files); + final AtomicBoolean rc = new AtomicBoolean(true); + if(!files.isEmpty()) { + UIUtil.invokeAndWaitIfNeeded(new Runnable() { + public void run() { + GitUpdateLocallyModifiedDialog d = new GitUpdateLocallyModifiedDialog(project, root, files); + d.show(); + rc.set(d.isOK()); + } + }); + if(rc.get()) { + if(!files.isEmpty()) { + revertFiles(project, root, files); + } + } + } + return rc.get(); + } + catch (final VcsException e) { + UIUtil.invokeAndWaitIfNeeded(new Runnable() { + public void run() { + GitUIUtil.showOperationError(project, e, "Checking for locally modified files"); + } + }); + return false; + } + } + + /** + * Revert files from the list + * + * @param project the project + * @param root the vcs root + * @param files the files to revert + */ + private static void revertFiles(Project project, VirtualFile root, ArrayList files) throws VcsException { + GitSimpleHandler h = new GitSimpleHandler(project, root, GitHandler.CHECKOUT); + h.endOptions(); + h.setNoSSH(true); + for(String p : files) { + h.addRelativePaths(VcsUtil.getFilePath(p)); + } + h.run(); + } +} -- 2.11.4.GIT