git4idea: Fixed crlf in plugin files

This commit is contained in:
Constantine Plotnikov
2009-10-01 15:38:50 +04:00
parent ee8375bca1
commit ff72363308
2 changed files with 601 additions and 601 deletions
@@ -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=<html>Connection to repository <tt>{0}</tt> has been successful.</html>
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=<html>Specify a commit author here if it is different from committer. The author should be in the format: Author Name &lt;author@ema.il&gt;</html>
commit.author=&Author:
commit.partial.merge.message=<html>The following files are not included in commit.<ul>{0}</ul>Perform commit with all files included?</html>
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=<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=<none>
current.branch.tracked.branch.tooltip=Select the branch to track
current.branch.tracked.branch=&Branch:
current.branch.tracked.remote.none=<none>
current.branch.tracked.remote.this=<this repository>
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=<html>Select fetched commits policy<ul><li><i>For fetched commits</i> means tags associated with commits on fetched branches are fetched.</li><li><i>All</i> means that all tags and reference commits are fetched</li><li><i>None</i> means that no tags are fetched.</li></ul></html>
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=<html><tt>{0}</tt><br>This version is unsupported, and some plugin functionality could fail to work.<br>The minimal supported version is <em>{1}</em>.</html>
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=<html>Running: {0}</html>
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=<html>Specify which version of SSH to be used with git.<ul><li><b>Native</b> means that the native ssh will be used.</li><li><b>IDEA SSH</b> means that the implementation provided by the IDEA will be used.</li></ul>The native implementation might cause hangups on some platforms. In native case, you also might need to configure <em>ssh-askpass</em> for your platform to recieve GUI promopts for passwords.</html>
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=<html>The chooser for braches. Select one or more braches to merge (already merged branches are not shown)</html>.
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=<default>
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=<html>Select push policy:<ul><li><em>Default</em> - the push is done according to the configuration of the remote.</li><li><em>Selected branches</em> - selected branches are pushed.</li><li><em>All</em> - all references under refs/heads are pushed.</li><li><em>Mirror</em> - all references under refs/ are pushed including tags and remotes.</li></ul></html>
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=<html>The reset type (see also <code>git reset</code> man page):<ul><li><b>Mixed</b> resets index but not working tree</li><li><b>Soft</b> leaves index and working tree, just moves head pointer</li><li><b>Hard</b> resets index and working tree.<em>Changes in the working tree will be lost</em></li></ul></html>
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=<html>The server host key for the host {0}:{1} has changed to {2} (type {3}).\nDo you want to accept the changed key?</html>
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=<html>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?</html>
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=<html><b><tt>{0}</tt></b>:<i>{1}</i>:{2}</html>
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=<html>The following files under this root are locally modified.<br/>Likely there is a problem with crlf conversion<br/>or IDEA managed to save a configuration file,<br/> and these changes should be just reverted.</html>
update.locally.modified.rescan.tooltip=<html>Rescan directory to check if there are still locally modified files.<br/>Use this button if you have resolved problem manually.</html>
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=<html>No changes detected <tt>{0}</tt>. <ul><li>Skip Commit - skips current commit in the rebase process</li><li>Retry Continue - do it after you add changes to commit manually</li><li>Or cancel cancels update process for this root.</li></ul></html>
update.rebase.unmerged.title=Unresolved Rebase Conflicts
update.rebase.unmerged=<html><b>{0}</b> file(s) are not yet merged. Repeat merge operation (no cancels update for root <tt>{1}</tt>?</html>
util.remote.renderer.default=<html><b>{0}</b>(<i>{1}</i>)</html>
util.remote.renderer.none=<html><i>None</i></html>
util.remote.renderer.normal=<html><b>{0}</b>(<i>{1}</i>)</html>
util.remote.renderer.self=<html><i>Current repository</i></html>
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=<html>Connection to repository <tt>{0}</tt> has been successful.</html>
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=<html>Specify a commit author here if it is different from committer. The author should be in the format: Author Name &lt;author@ema.il&gt;</html>
commit.author=&Author:
commit.partial.merge.message=<html>The following files are not included in commit.<ul>{0}</ul>Perform commit with all files included?</html>
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=<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=<none>
current.branch.tracked.branch.tooltip=Select the branch to track
current.branch.tracked.branch=&Branch:
current.branch.tracked.remote.none=<none>
current.branch.tracked.remote.this=<this repository>
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=<html>Select fetched commits policy<ul><li><i>For fetched commits</i> means tags associated with commits on fetched branches are fetched.</li><li><i>All</i> means that all tags and reference commits are fetched</li><li><i>None</i> means that no tags are fetched.</li></ul></html>
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=<html><tt>{0}</tt><br>This version is unsupported, and some plugin functionality could fail to work.<br>The minimal supported version is <em>{1}</em>.</html>
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=<html>Running: {0}</html>
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=<html>Specify which version of SSH to be used with git.<ul><li><b>Native</b> means that the native ssh will be used.</li><li><b>IDEA SSH</b> means that the implementation provided by the IDEA will be used.</li></ul>The native implementation might cause hangups on some platforms. In native case, you also might need to configure <em>ssh-askpass</em> for your platform to recieve GUI promopts for passwords.</html>
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=<html>The chooser for braches. Select one or more braches to merge (already merged branches are not shown)</html>.
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=<default>
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=<html>Select push policy:<ul><li><em>Default</em> - the push is done according to the configuration of the remote.</li><li><em>Selected branches</em> - selected branches are pushed.</li><li><em>All</em> - all references under refs/heads are pushed.</li><li><em>Mirror</em> - all references under refs/ are pushed including tags and remotes.</li></ul></html>
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=<html>The reset type (see also <code>git reset</code> man page):<ul><li><b>Mixed</b> resets index but not working tree</li><li><b>Soft</b> leaves index and working tree, just moves head pointer</li><li><b>Hard</b> resets index and working tree.<em>Changes in the working tree will be lost</em></li></ul></html>
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=<html>The server host key for the host {0}:{1} has changed to {2} (type {3}).\nDo you want to accept the changed key?</html>
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=<html>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?</html>
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=<html><b><tt>{0}</tt></b>:<i>{1}</i>:{2}</html>
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=<html>The following files under this root are locally modified.<br/>Likely there is a problem with crlf conversion<br/>or IDEA managed to save a configuration file,<br/> and these changes should be just reverted.</html>
update.locally.modified.rescan.tooltip=<html>Rescan directory to check if there are still locally modified files.<br/>Use this button if you have resolved problem manually.</html>
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=<html>No changes detected <tt>{0}</tt>. <ul><li>Skip Commit - skips current commit in the rebase process</li><li>Retry Continue - do it after you add changes to commit manually</li><li>Or cancel cancels update process for this root.</li></ul></html>
update.rebase.unmerged.title=Unresolved Rebase Conflicts
update.rebase.unmerged=<html><b>{0}</b> file(s) are not yet merged. Repeat merge operation (no cancels update for root <tt>{1}</tt>?</html>
util.remote.renderer.default=<html><b>{0}</b>(<i>{1}</i>)</html>
util.remote.renderer.none=<html><i>None</i></html>
util.remote.renderer.normal=<html><b>{0}</b>(<i>{1}</i>)</html>
util.remote.renderer.self=<html><i>Current repository</i></html>
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
@@ -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<String> 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<String> 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<String> 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<String> files = new ArrayList<String>();
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<String> 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<String> 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<String> 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<String> 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<String> files = new ArrayList<String>();
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<String> 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();
}
}