Per CQ 3448 this is the initial contribution of the JGit project
to eclipse.org. It is derived from the historical JGit repository
at commit 3a2dd9921c
.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
tags/v0.7.0
@@ -0,0 +1 @@ | |||
*.java diff=java |
@@ -0,0 +1,6 @@ | |||
/jgit | |||
/jgit.jar | |||
/jgit_src.zip | |||
/jgit_docs.zip | |||
/org.eclipse.jgit/lib/jsch-*.jar | |||
/org.eclipse.jgit.pgm/lib/args4j-*.jar |
@@ -0,0 +1,42 @@ | |||
/* | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
@@ -0,0 +1,122 @@ | |||
== Java GIT == | |||
This package is licensed under the BSD. | |||
org.eclipse.jgit/ | |||
A pure Java library capable of being run standalone, with no | |||
additional support libraries. Some JUnit tests are provided | |||
to exercise the library. The library provides functions to | |||
read and write a GIT formatted repository. | |||
All portions of jgit are covered by the BSD. Absolutely no GPL, | |||
LGPL or EPL contributions are accepted within this package. | |||
org.eclipse.jgit.test/ | |||
Unit tests for org.eclipse.jgit and the same licensing rules. | |||
== WARNINGS / CAVEATS == | |||
- Symbolic links are not supported because java does not support it. | |||
Such links could be damaged. | |||
- Only the timestamp of the index is used by jgit check if the index | |||
is dirty. | |||
- Don't try the library with a JDK other than 1.6 (Java 6) unless you | |||
are prepared to investigate problems yourself. JDK 1.5.0_11 and later | |||
Java 5 versions *may* work. Earlier versions do not. JDK 1.4 is *not* | |||
supported. Apple's Java 1.5.0_07 is reported to work acceptably. We | |||
have no information about other vendors. Please report your findings | |||
if you try. | |||
- CRLF conversion is never performed. On Windows you should thereforc | |||
make sure your projects and workspaces are configured to save files | |||
with Unix (LF) line endings. | |||
== Package Features == | |||
org.eclipse.jgit/ | |||
* Read loose and packed commits, trees, blobs, including | |||
deltafied objects. | |||
* Read objects from shared repositories | |||
* Write loose commits, trees, blobs. | |||
* Write blobs from local files or Java InputStreams. | |||
* Read blobs as Java InputStreams. | |||
* Copy trees to local directory, or local directory to a tree. | |||
* Lazily loads objects as necessary. | |||
* Read and write .git/config files. | |||
* Create a new repository. | |||
* Read and write refs, including walking through symrefs. | |||
* Read, update and write the Git index. | |||
* Checkout in dirty working directory if trivial. | |||
* Walk the history from a given set of commits looking for commits | |||
introducing changes in files under a specified path. | |||
* Object transport | |||
Fetch via ssh, git, http, Amazon S3 and bundles. | |||
Push via ssh, git and Amazon S3. JGit does not yet deltify | |||
the pushed packs so they may be a lot larger than C Git packs. | |||
org.eclipse.jgit.pgm/ | |||
* Assorted set of command line utilities. Mostly for ad-hoc testing of jgit | |||
log, glog, fetch etc. | |||
== Missing Features == | |||
There are a lot of missing features. You need the real Git for this. | |||
For some operations it may just be the preferred solution also. There | |||
are not just a command line, there is e.g. git-gui that makes committing | |||
partial files simple. | |||
- Merging. | |||
- Repacking. | |||
- Generate a GIT format patch. | |||
- Apply a GIT format patch. | |||
- Documentation. :-) | |||
- gitattributes support | |||
In particular CRLF conversion is not implemented. Files are treated | |||
as byte sequences. | |||
- submodule support | |||
Submodules are not supported or even recognized. | |||
== Support == | |||
Post question, comments or patches to the git@vger.kernel.org mailing list. | |||
== Contributing == | |||
See SUBMITTING_PATCHES in this directory. However, feedback and bug reports | |||
are also contributions. | |||
== About GIT == | |||
More information about GIT, its repository format, and the canonical | |||
C based implementation can be obtained from the GIT websites: | |||
http://git.or.cz/ | |||
http://www.kernel.org/pub/software/scm/git/ | |||
http://www.kernel.org/pub/software/scm/git/docs/ | |||
@@ -0,0 +1,366 @@ | |||
Short Version: | |||
- Make small logical changes. | |||
- Provide a meaningful commit message. | |||
- Include your Signed-Off-By line to note you agree with the | |||
Developer's Certificate of Origin (see below). | |||
- Make sure all code is under the proper license: | |||
3-clause BSD | |||
- Use a subject prefix of "[PATCH JGIT ...]" when sending any | |||
patches directly by email. | |||
- Send by email to the maintainers, cc'ing the git mailing list | |||
which is currently used for both Git and JGit: | |||
maintainers : "Shawn O. Pearce" <spearce@spearce.org> | |||
Robin Rosenberg <robin.rosenberg@dewire.com> | |||
git list : git@vger.kernel.org | |||
git list info : http://vger.kernel.org/vger-lists.html#git | |||
Long Version: | |||
I wanted a file describing how to submit patches for JGit, | |||
so I started with the one found in the core Git distribution | |||
(Documentation/SubmittingPatches), which itself was based on the | |||
patch submission guidelines for the Linux kernel. | |||
However there are some differences, so please review and familiarize | |||
yourself with the following relevant bits: | |||
(1) Make separate commits for logically separate changes. | |||
Unless your patch is really trivial, you should not be sending | |||
out a patch that was generated between your working tree and your | |||
commit head. Instead, always make a commit with complete commit | |||
message and generate a series of patches from your repository. | |||
It is a good discipline. | |||
Describe the technical detail of the change(s). | |||
If your description starts to get too long, that's a sign that you | |||
probably need to split up your commit to finer grained pieces. | |||
I am very picky about formatting. Make sure your final version | |||
of every file was formatted using the Eclipse code formatter | |||
using the project specific settings (Properties->Java Code | |||
Style->Formatter->"Java Conventions [built-in]"). | |||
(2) Generate your patch using git tools out of your commits. | |||
git based diff tools (git, and StGIT included) generate unidiff, | |||
which is the only acceptable format. | |||
You do not have to be afraid to use -M option to "git diff" or "git | |||
format-patch", if your patch involves file renames. The receiving | |||
end can handle them just fine. | |||
Please make sure your patch does not include any extra files which | |||
do not belong in a patch submission. Make sure to review your | |||
patch after generating it, to ensure accuracy. Before sending out, | |||
please make sure it cleanly applies to the "master" branch head. | |||
(3) Sending your patches. | |||
People on the git mailing list need to be able to read and comment | |||
on the changes you are submitting. It is important for a developer | |||
to be able to "quote" your changes, using standard e-mail tools, so | |||
that they may comment on specific portions of your code. For this | |||
reason, all patches should be submitted "inline". WARNING: Be wary | |||
of your MUAs word-wrap corrupting your patch. Do not cut-n-paste | |||
your patch; you can lose tabs that way if you are not careful. | |||
It is a common convention to prefix your subject line with [PATCH]. | |||
This lets people easily distinguish patches from other e-mail | |||
discussions. | |||
"git format-patch" command follows the best current practice to | |||
format the body of an e-mail message. At the beginning of the patch | |||
should come your commit message, ending with the Signed-off-by: | |||
lines, and a line that consists of three dashes, followed by the | |||
diffstat information and the patch itself. If you are forwarding a | |||
patch from somebody else, optionally, at the beginning of the e-mail | |||
message just before the commit message starts, you can put a "From: | |||
" line to name that person. | |||
You often want to add additional explanation about the patch, | |||
other than the commit message itself. Place such "cover letter" | |||
material between the three dash lines and the diffstat. | |||
Do not attach the patch as a MIME attachment, compressed or not. | |||
Do not let your e-mail client send quoted-printable. Do not let your | |||
e-mail client send format=flowed which would destroy whitespaces | |||
in your patches. Many popular e-mail applications will not always | |||
transmit a MIME attachment as plain text, making it impossible to | |||
comment on your code. A MIME attachment also takes a bit more | |||
time to process. This does not decrease the likelihood of your | |||
MIME-attached change being accepted, but it makes it more likely | |||
that it will be postponed. | |||
Exception: If your mailer is mangling patches then someone may ask | |||
you to re-send them using MIME, that is OK. | |||
Do not PGP sign your patch, at least for now. Most likely, your | |||
maintainer or other people on the list would not have your PGP | |||
key and would not bother obtaining it anyway. Your patch is not | |||
judged by who you are; a good patch from an unknown origin has a | |||
far better chance of being accepted than a patch from a known, | |||
respected origin that is done poorly or does incorrect things. | |||
If you really really really really want to do a PGP signed | |||
patch, format it as "multipart/signed", not a text/plain message | |||
that starts with '-----BEGIN PGP SIGNED MESSAGE-----'. That is | |||
not a text/plain, it's something else. | |||
Note that your maintainer does not necessarily read everything | |||
on the git mailing list. If your patch is for discussion first, | |||
send it "To:" the mailing list, and optionally "cc:" him. If it | |||
is trivially correct or after the list reached a consensus, send it | |||
"To:" the maintainer and optionally "cc:" the list. | |||
(4) Check the license | |||
JGit is licensed under the 3-clause (new-style) BSD. | |||
Because of this licensing model *every* file within the project | |||
*must* list which license covers it in the header of the file. | |||
Any new contributions to an existing file *must* be submitted under | |||
the current license of that file. Any new files *must* clearly | |||
indicate which license they are provided under in the file header. | |||
Please verify that you are legally allowed and willing to submit your | |||
changes under the license covering each file *prior* to submitting | |||
your patch. It is virtually impossible to remove a patch once it | |||
has been applied and pushed out. | |||
(5) Sign your work | |||
To improve tracking of who did what, we've borrowed the "sign-off" | |||
procedure from the Linux kernel project on patches that are being | |||
emailed around. Although JGit is a lot smaller project it is | |||
a good discipline to follow it. | |||
The sign-off is a simple line at the end of the explanation for the | |||
patch, which certifies that you wrote it or otherwise have the right | |||
to pass it on as a open-source patch. The rules are pretty simple: | |||
if you can certify the below: | |||
Developer's Certificate of Origin 1.1 | |||
By making a contribution to this project, I certify that: | |||
(a) The contribution was created in whole or in part by me | |||
and I have the right to submit it under the open source | |||
license indicated in the file; or | |||
(b) The contribution is based upon previous work that, to the | |||
best of my knowledge, is covered under an appropriate | |||
open source license and I have the right under that | |||
license to submit that work with modifications, whether | |||
created in whole or in part by me, under the same open | |||
source license (unless I am permitted to submit under | |||
a different license), as indicated in the file; or | |||
(c) The contribution was provided directly to me by some | |||
other person who certified (a), (b) or (c) and I have | |||
not modified it. | |||
(d) I understand and agree that this project and the | |||
contribution are public and that a record of the | |||
contribution (including all personal information I | |||
submit with it, including my sign-off) is maintained | |||
indefinitely and may be redistributed consistent with | |||
this project or the open source license(s) involved. | |||
then you just add a line saying | |||
Signed-off-by: Random J Developer <random@developer.example.org> | |||
This line can be automatically added by git if you run the git-commit | |||
command with the -s option. | |||
Some people also put extra tags at the end. They'll just be ignored | |||
for now, but you can do this to mark internal company procedures | |||
or just point out some special detail about the sign-off. | |||
------------------------------------------------ | |||
MUA specific hints | |||
Some of patches I receive or pick up from the list share common | |||
patterns of breakage. Please make sure your MUA is set up | |||
properly not to corrupt whitespaces. Here are two common ones | |||
I have seen: | |||
* Empty context lines that do not have _any_ whitespace. | |||
* Non empty context lines that have one extra whitespace at the | |||
beginning. | |||
One test you could do yourself if your MUA is set up correctly is: | |||
* Send the patch to yourself, exactly the way you would, except | |||
To: and Cc: lines, which would not contain the list and | |||
maintainer address. | |||
* Save that patch to a file in UNIX mailbox format. Call it say | |||
a.patch. | |||
* Try to apply to the tip of the "master" branch from the | |||
egit.git public repository: | |||
$ git fetch git://repo.or.cz/egit.git master:test-apply | |||
$ git checkout test-apply | |||
$ git reset --hard | |||
$ git am a.patch | |||
If it does not apply correctly, there can be various reasons. | |||
* Your patch itself does not apply cleanly. That is _bad_ but | |||
does not have much to do with your MUA. Please rebase the | |||
patch appropriately. | |||
* Your MUA corrupted your patch; applymbox would complain that | |||
the patch does not apply. Look at .dotest/ subdirectory and | |||
see what 'patch' file contains and check for the common | |||
corruption patterns mentioned above. | |||
* While you are at it, check what are in 'info' and | |||
'final-commit' files as well. If what is in 'final-commit' is | |||
not exactly what you would want to see in the commit log | |||
message, it is very likely that your maintainer would end up | |||
hand editing the log message when he applies your patch. | |||
Things like "Hi, this is my first patch.\n", if you really | |||
want to put in the patch e-mail, should come after the | |||
three-dash line that signals the end of the commit message. | |||
Pine | |||
---- | |||
(Johannes Schindelin) | |||
I don't know how many people still use pine, but for those poor | |||
souls it may be good to mention that the quell-flowed-text is | |||
needed for recent versions. | |||
... the "no-strip-whitespace-before-send" option, too. AFAIK it | |||
was introduced in 4.60. | |||
(Linus Torvalds) | |||
And 4.58 needs at least this. | |||
--- | |||
diff-tree 8326dd8350be64ac7fc805f6563a1d61ad10d32c (from e886a61f76edf5410573e92e38ce22974f9c40f1) | |||
Author: Linus Torvalds <torvalds@g5.osdl.org> | |||
Date: Mon Aug 15 17:23:51 2005 -0700 | |||
Fix pine whitespace-corruption bug | |||
There's no excuse for unconditionally removing whitespace from | |||
the pico buffers on close. | |||
diff --git a/pico/pico.c b/pico/pico.c | |||
--- a/pico/pico.c | |||
+++ b/pico/pico.c | |||
@@ -219,7 +219,9 @@ PICO *pm; | |||
switch(pico_all_done){ /* prepare for/handle final events */ | |||
case COMP_EXIT : /* already confirmed */ | |||
packheader(); | |||
+#if 0 | |||
stripwhitespace(); | |||
+#endif | |||
c |= COMP_EXIT; | |||
break; | |||
(Daniel Barkalow) | |||
> A patch to SubmittingPatches, MUA specific help section for | |||
> users of Pine 4.63 would be very much appreciated. | |||
Ah, it looks like a recent version changed the default behavior to do the | |||
right thing, and inverted the sense of the configuration option. (Either | |||
that or Gentoo did it.) So you need to set the | |||
"no-strip-whitespace-before-send" option, unless the option you have is | |||
"strip-whitespace-before-send", in which case you should avoid checking | |||
it. | |||
Thunderbird | |||
----------- | |||
(A Large Angry SCM) | |||
Here are some hints on how to successfully submit patches inline using | |||
Thunderbird. | |||
This recipe appears to work with the current [*1*] Thunderbird from Suse. | |||
The following Thunderbird extensions are needed: | |||
AboutConfig 0.5 | |||
http://aboutconfig.mozdev.org/ | |||
External Editor 0.7.2 | |||
http://globs.org/articles.php?lng=en&pg=8 | |||
1) Prepare the patch as a text file using your method of choice. | |||
2) Before opening a compose window, use Edit->Account Settings to | |||
uncheck the "Compose messages in HTML format" setting in the | |||
"Composition & Addressing" panel of the account to be used to send the | |||
patch. [*2*] | |||
3) In the main Thunderbird window, _before_ you open the compose window | |||
for the patch, use Tools->about:config to set the following to the | |||
indicated values: | |||
mailnews.send_plaintext_flowed => false | |||
mailnews.wraplength => 0 | |||
4) Open a compose window and click the external editor icon. | |||
5) In the external editor window, read in the patch file and exit the | |||
editor normally. | |||
6) Back in the compose window: Add whatever other text you wish to the | |||
message, complete the addressing and subject fields, and press send. | |||
7) Optionally, undo the about:config/account settings changes made in | |||
steps 2 & 3. | |||
[Footnotes] | |||
*1* Version 1.0 (20041207) from the MozillaThunderbird-1.0-5 rpm of Suse | |||
9.3 professional updates. | |||
*2* It may be possible to do this with about:config and the following | |||
settings but I haven't tried, yet. | |||
mail.html_compose => false | |||
mail.identity.default.compose_html => false | |||
mail.identity.id?.compose_html => false | |||
Gnus | |||
---- | |||
'|' in the *Summary* buffer can be used to pipe the current | |||
message to an external program, and this is a handy way to drive | |||
"git am". However, if the message is MIME encoded, what is | |||
piped into the program is the representation you see in your | |||
*Article* buffer after unwrapping MIME. This is often not what | |||
you would want for two reasons. It tends to screw up non ASCII | |||
characters (most notably in people's names), and also | |||
whitespaces (fatal in patches). Running 'C-u g' to display the | |||
message in raw form before using '|' to run the pipe can work | |||
this problem around. | |||
@@ -0,0 +1,49 @@ | |||
= JGit Wishlist = | |||
Below are some of the areas that needs work. Also take a look at JGit | |||
related issues in the EGit project: | |||
- http://code.google.com/p/egit/issues/list?q=label:Component-JGit | |||
== Switch Branch == | |||
Switch to an existing branch, updating the working directory to match. | |||
Note that updating the working directory may require a 3 way merge | |||
if the working directory is dirty (git checkout -m). | |||
My usual git working style is to not switch branches with a dirty | |||
working directory; I always commit to the current branch before | |||
switching to a new one. I mention that because I assume it'll be | |||
easier to implement that workflow first; once you have commit | |||
capability, you can do that style of branch switching (either | |||
preventing the switch or doing an implicit commit when the working | |||
directory is dirty) without having to worry about merging. ''-- | |||
Steven Grimm'' | |||
== Merge == | |||
Merging changes from one local branch to another. | |||
Again, like fetch I'd like to keep egit/jgit 100% pure Java and | |||
implement merge-recursive in Java. We may need to invoke RCS | |||
merge if Eclipse doesn't have its own 3 way file merge algorithm | |||
available, or do what core Git just did and implement a 3 way in | |||
memory merge algorithm. git-merge-recursive is only 1336 lines of C | |||
so it should not be too difficult to port the algorithm to pure Java. | |||
== SVN Integration == | |||
It would be swell -- but put it at the bottom of your priority list | |||
-- to have git-svn interoperability; sadly most of my git usage at | |||
the moment is in cloned svn repositories and it would be great if | |||
egit could do the right thing when the current git repo is cloned | |||
from svn. What "the right thing" is, exactly, is debatable, but I | |||
suppose some kind of integration with the Subclipse plugin is one | |||
possibility (and if nothing else, that plugin probably has code | |||
that can be reused.) I'd like to be able to update from and commit | |||
to the parent svn repository. ''-- Steven Grimm'' | |||
I'm considering this to be out of scope for the time being, but if | |||
someone takes it on and submits reasonable patches we'll include | |||
them. ''-- Shawn Pearce'' |
@@ -0,0 +1 @@ | |||
target |
@@ -0,0 +1,226 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<!-- | |||
Copyright (C) 2008, Imran M Yousuf <imyousuf@smartitengineering.com> | |||
and other copyright owners as documented in the project's IP log. | |||
This program and the accompanying materials are made available | |||
under the terms of the Eclipse Distribution License v1.0 which | |||
accompanies this distribution, is reproduced below, and is | |||
available at http://www.eclipse.org/org/documents/edl-v10.php | |||
All rights reserved. | |||
Redistribution and use in source and binary forms, with or | |||
without modification, are permitted provided that the following | |||
conditions are met: | |||
- Redistributions of source code must retain the above copyright | |||
notice, this list of conditions and the following disclaimer. | |||
- Redistributions in binary form must reproduce the above | |||
copyright notice, this list of conditions and the following | |||
disclaimer in the documentation and/or other materials provided | |||
with the distribution. | |||
- Neither the name of the Eclipse Foundation, Inc. nor the | |||
names of its contributors may be used to endorse or promote | |||
products derived from this software without specific prior | |||
written permission. | |||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
--> | |||
<project xmlns="http://maven.apache.org/POM/4.0.0" | |||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> | |||
<modelVersion>4.0.0</modelVersion> | |||
<groupId>org.eclipse</groupId> | |||
<artifactId>jgit</artifactId> | |||
<packaging>jar</packaging> | |||
<version>0.5.0-SNAPSHOT</version> | |||
<name>jgit</name> | |||
<url>http://repo.or.cz/w/jgit.git</url> | |||
<mailingLists> | |||
<mailingList> | |||
<name>GIT Mailing List</name> | |||
<post>git@vger.kernel.org</post> | |||
<archive>http://marc.info/?l=git</archive> | |||
</mailingList> | |||
</mailingLists> | |||
<description>Pure Java implementation of Git</description> | |||
<developers> | |||
<developer> | |||
<name>Shawn O. Pearce</name> | |||
<email>spearce@spearce.org</email> | |||
<roles> | |||
<role>Maintainer</role> | |||
</roles> | |||
</developer> | |||
<developer> | |||
<name>Robin Rosenberg</name> | |||
<email>robin.rosenberg@dewire.com</email> | |||
<roles> | |||
<role>Maintainer</role> | |||
</roles> | |||
</developer> | |||
<developer> | |||
<name>Dave Watson</name> | |||
<email>dwatson@mimvista.com</email> | |||
<roles> | |||
<role>Developer</role> | |||
</roles> | |||
</developer> | |||
<developer> | |||
<name>Roger C. Soares</name> | |||
<email>rogersoares@intelinet.com.br</email> | |||
<roles> | |||
<role>Developer</role> | |||
</roles> | |||
</developer> | |||
<developer> | |||
<name>Marek Zawirski</name> | |||
<email>marek.zawirski@gmail.com</email> | |||
<roles> | |||
<role>Developer</role> | |||
</roles> | |||
</developer> | |||
<developer> | |||
<name>Charles O'Farrell</name> | |||
<email>charleso@charleso.org</email> | |||
<roles> | |||
<role>Contributor</role> | |||
</roles> | |||
</developer> | |||
<developer> | |||
<name>Imran M Yousuf</name> | |||
<email>imyousuf@smartitengineering.com</email> | |||
<organization>Smart IT Engineering</organization> | |||
<roles> | |||
<role>Contributor</role> | |||
</roles> | |||
</developer> | |||
</developers> | |||
<licenses> | |||
<license> | |||
<name>Eclipse Distribution License (New BSD License)</name> | |||
<comments> | |||
All rights reserved. | |||
Redistribution and use in source and binary forms, with or | |||
without modification, are permitted provided that the following | |||
conditions are met: | |||
Redistributions of source code must retain the above copyright | |||
notice, this list of conditions and the following disclaimer. | |||
Redistributions in binary form must reproduce the above | |||
copyright notice, this list of conditions and the following | |||
disclaimer in the documentation and/or other materials provided | |||
with the distribution. | |||
Neither the name of the Eclipse Foundation, Inc. nor the | |||
names of its contributors may be used to endorse or promote | |||
products derived from this software without specific prior | |||
written permission. | |||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
</comments> | |||
</license> | |||
</licenses> | |||
<build> | |||
<sourceDirectory>../../org.eclipse.jgit/src/</sourceDirectory> | |||
<testResources> | |||
<testResource> | |||
<directory>../../org.eclipse.jgit.test/tst-rsrc/</directory> | |||
</testResource> | |||
</testResources> | |||
<testSourceDirectory>../../org.eclipse.jgit.test/tst/</testSourceDirectory> | |||
<plugins> | |||
<plugin> | |||
<artifactId>maven-compiler-plugin</artifactId> | |||
<version>2.0.2</version> | |||
<configuration> | |||
<source>1.5</source> | |||
<target>1.5</target> | |||
<encoding>UTF-8</encoding> | |||
</configuration> | |||
</plugin> | |||
<plugin> | |||
<artifactId>maven-surefire-plugin</artifactId> | |||
<version>2.4.2</version> | |||
<configuration> | |||
<includes> | |||
<include>**/*Test.java</include> | |||
<include>**/*TestCase.java</include> | |||
<include>**/T000*.java</include> | |||
</includes> | |||
</configuration> | |||
</plugin> | |||
<plugin> | |||
<artifactId>maven-source-plugin</artifactId> | |||
<executions> | |||
<execution> | |||
<goals> | |||
<goal>jar</goal> | |||
</goals> | |||
</execution> | |||
</executions> | |||
</plugin> | |||
<plugin> | |||
<artifactId>maven-javadoc-plugin</artifactId> | |||
<executions> | |||
<execution> | |||
<goals> | |||
<goal>jar</goal> | |||
</goals> | |||
</execution> | |||
</executions> | |||
</plugin> | |||
</plugins> | |||
</build> | |||
<dependencies> | |||
<dependency> | |||
<groupId>junit</groupId> | |||
<artifactId>junit</artifactId> | |||
<version>3.8.1</version> | |||
<scope>test</scope> | |||
</dependency> | |||
<dependency> | |||
<groupId>com.jcraft</groupId> | |||
<artifactId>jsch</artifactId> | |||
<version>0.1.41</version> | |||
<scope>compile</scope> | |||
</dependency> | |||
</dependencies> | |||
<distributionManagement> | |||
<snapshotRepository> | |||
<id>jgit-maven-snapshot-repository</id> | |||
<name>JGit Maven Snapshot Repository</name> | |||
<url>dav:https://egit.googlecode.com/svn/maven/snapshot-repository/</url> | |||
<uniqueVersion>true</uniqueVersion> | |||
</snapshotRepository> | |||
</distributionManagement> | |||
</project> |
@@ -0,0 +1,94 @@ | |||
#!/bin/sh | |||
# Copyright (C) 2008-2009, Google Inc. | |||
# Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> | |||
# and other copyright owners as documented in the project's IP log. | |||
# | |||
# This program and the accompanying materials are made available | |||
# under the terms of the Eclipse Distribution License v1.0 which | |||
# accompanies this distribution, is reproduced below, and is | |||
# available at http://www.eclipse.org/org/documents/edl-v10.php | |||
# | |||
# All rights reserved. | |||
# | |||
# Redistribution and use in source and binary forms, with or | |||
# without modification, are permitted provided that the following | |||
# conditions are met: | |||
# | |||
# - Redistributions of source code must retain the above copyright | |||
# notice, this list of conditions and the following disclaimer. | |||
# | |||
# - Redistributions in binary form must reproduce the above | |||
# copyright notice, this list of conditions and the following | |||
# disclaimer in the documentation and/or other materials provided | |||
# with the distribution. | |||
# | |||
# - Neither the name of the Eclipse Foundation, Inc. nor the | |||
# names of its contributors may be used to endorse or promote | |||
# products derived from this software without specific prior | |||
# written permission. | |||
# | |||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
# CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
if [ "@@use_self@@" = "1" ] | |||
then | |||
this_script=`which "$0" 2>/dev/null` | |||
[ $? -gt 0 -a -f "$0" ] && this_script="$0" | |||
cp=$this_script | |||
else | |||
jgit_home=`dirname $0` | |||
cp="$jgit_home/org.eclipse.jgit/bin" | |||
cp="$cp:$jgit_home/org.eclipse.jgit/lib/jsch-0.1.37.jar" | |||
cp="$cp:$jgit_home/org.eclipse.jgit.pgm/bin" | |||
cp="$cp:$jgit_home/org.eclipse.jgit.pgm/lib/args4j-2.0.9.jar" | |||
unset jgit_home | |||
java_args= | |||
fi | |||
if [ -n "$JGIT_CLASSPATH" ] | |||
then | |||
cp="$cp:$JGIT_CLASSPATH" | |||
fi | |||
# Cleanup paths for Cygwin. | |||
# | |||
case "`uname`" in | |||
CYGWIN*) | |||
cp=`cygpath --windows --mixed --path "$cp"` | |||
;; | |||
Darwin) | |||
if test -e /System/Library/Frameworks/JavaVM.framework | |||
then | |||
java_args=' | |||
-Dcom.apple.mrj.application.apple.menu.about.name=JGit | |||
-Dcom.apple.mrj.application.growbox.intrudes=false | |||
-Dapple.laf.useScreenMenuBar=true | |||
-Xdock:name=JGit | |||
' | |||
fi | |||
;; | |||
esac | |||
CLASSPATH="$cp" | |||
export CLASSPATH | |||
java=java | |||
if test -n "$JAVA_HOME" | |||
then | |||
java="$JAVA_HOME/bin/java" | |||
fi | |||
exec "$java" $java_args org.eclipse.jgit.pgm.Main "$@" | |||
exit 1 |
@@ -0,0 +1,179 @@ | |||
#!/bin/sh | |||
# Copyright (C) 2009, Christian Halstrick <christian.halstrick@sap.com> | |||
# Copyright (C) 2008-2009, Google Inc. | |||
# Copyright (C) 2009, Johannes Schindelin <Johannes.Schindelin@gmx.de> | |||
# Copyright (C) 2008, Mike Ralphson <mike@abacus.co.uk> | |||
# Copyright (C) 2009, Nicholas Campbell <nicholas.j.campbell@gmail.com> | |||
# Copyright (C) 2009, Robin Rosenberg <robin.rosenberg@gmail.com> | |||
# Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> | |||
# and other copyright owners as documented in the project's IP log. | |||
# | |||
# This program and the accompanying materials are made available | |||
# under the terms of the Eclipse Distribution License v1.0 which | |||
# accompanies this distribution, is reproduced below, and is | |||
# available at http://www.eclipse.org/org/documents/edl-v10.php | |||
# | |||
# All rights reserved. | |||
# | |||
# Redistribution and use in source and binary forms, with or | |||
# without modification, are permitted provided that the following | |||
# conditions are met: | |||
# | |||
# - Redistributions of source code must retain the above copyright | |||
# notice, this list of conditions and the following disclaimer. | |||
# | |||
# - Redistributions in binary form must reproduce the above | |||
# copyright notice, this list of conditions and the following | |||
# disclaimer in the documentation and/or other materials provided | |||
# with the distribution. | |||
# | |||
# - Neither the name of the Eclipse Foundation, Inc. nor the | |||
# names of its contributors may be used to endorse or promote | |||
# products derived from this software without specific prior | |||
# written permission. | |||
# | |||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
# CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
O_CLI=jgit | |||
O_JAR=jgit.jar | |||
O_SRC=jgit_src.zip | |||
O_DOC=jgit_docs.zip | |||
PLUGINS=" | |||
org.eclipse.jgit | |||
org.eclipse.jgit.pgm | |||
" | |||
JARS=" | |||
org.eclipse.jgit/lib/jsch-0.1.37.jar | |||
org.eclipse.jgit.pgm/lib/args4j-2.0.9.jar | |||
" | |||
PSEP=":" | |||
T=".temp$$.$O_CLI" | |||
T_MF="$T.MF" | |||
R=`pwd` | |||
if [ "$OSTYPE" = "cygwin" ] | |||
then | |||
R=`cygpath -m $R` | |||
PSEP=";" | |||
fi | |||
if [ "$MSYSTEM" = "MINGW" -o "$MSYSTEM" = "MINGW32" ] | |||
then | |||
PSEP=";" | |||
R=`pwd -W` | |||
fi | |||
if [ -n "$JAVA_HOME" ] | |||
then | |||
PATH=${JAVA_HOME}/bin${PSEP}${PATH} | |||
fi | |||
cleanup_bin() { | |||
rm -f $T $O_CLI+ $O_JAR+ $O_SRC+ $T_MF | |||
for p in $PLUGINS | |||
do | |||
rm -rf $p/bin2 | |||
done | |||
rm -rf docs | |||
} | |||
die() { | |||
cleanup_bin | |||
rm -f $O_CLI $O_JAR $O_SRC | |||
echo >&2 "$@" | |||
exit 1 | |||
} | |||
cleanup_bin | |||
rm -f $O_CLI $O_JAR $O_SRC $O_DOC | |||
VN=`git describe --abbrev=4 HEAD 2>/dev/null` | |||
git update-index -q --refresh | |||
if [ -n "`git diff-index --name-only HEAD --`" ] | |||
then | |||
VN="$VN-dirty" | |||
fi | |||
VN=${VN:-untagged}`echo "$VN" | sed -e s/-/./g` | |||
CLASSPATH= | |||
for j in $JARS | |||
do | |||
if [ -z "$CLASSPATH" ] | |||
then | |||
CLASSPATH="$R/$j" | |||
else | |||
CLASSPATH="${CLASSPATH}${PSEP}$R/$j" | |||
fi | |||
done | |||
export CLASSPATH | |||
for p in $PLUGINS | |||
do | |||
echo "Entering $p ..." | |||
(cd $p/src && | |||
mkdir ../bin2 && | |||
find . -name \*.java -type f | | |||
xargs javac \ | |||
-source 1.5 \ | |||
-target 1.5 \ | |||
-encoding UTF-8 \ | |||
-g \ | |||
-d ../bin2) || die "Building $p failed." | |||
CLASSPATH="${CLASSPATH}${PSEP}$R/$p/bin2" | |||
done | |||
echo | |||
echo "Version $VN" && | |||
echo Manifest-Version: 1.0 >$T_MF && | |||
echo Implementation-Title: jgit >>$T_MF && | |||
echo Implementation-Version: $VN >>$T_MF && | |||
java org.eclipse.jgit.pgm.build.JarLinkUtil \ | |||
-include org.eclipse.jgit/bin2 \ | |||
-file META-INF/MANIFEST.MF=$T_MF \ | |||
>$O_JAR+ && | |||
mv $O_JAR+ $O_JAR && | |||
echo "Created $O_JAR." && | |||
java org.eclipse.jgit.pgm.build.JarLinkUtil \ | |||
-include org.eclipse.jgit/src \ | |||
-file META-INF/MANIFEST.MF=$T_MF \ | |||
>$O_SRC+ && | |||
mv $O_SRC+ $O_SRC && | |||
echo "Created $O_SRC." && | |||
M_TB=META-INF/services/org.eclipse.jgit.pgm.TextBuiltin && | |||
sed s/@@use_self@@/1/ jgit.sh >$O_CLI+ && | |||
java org.eclipse.jgit.pgm.build.JarLinkUtil \ | |||
`for p in $JARS ; do printf %s " -include $p" ;done` \ | |||
`for p in $PLUGINS; do printf %s " -include $p/bin2";done` \ | |||
-file $M_TB=org.eclipse.jgit.pgm/src/$M_TB \ | |||
-file META-INF/MANIFEST.MF=$T_MF \ | |||
>>$O_CLI+ && | |||
chmod 555 $O_CLI+ && | |||
mv $O_CLI+ $O_CLI && | |||
echo "Created $O_CLI." || die "Build failed." | |||
echo "Building Javadocs ..." | |||
for p in $PLUGINS; do | |||
javadoc -quiet -sourcepath "$p/src/" -d "docs/$p/" \ | |||
`find "$p/src" -name "*.java"` | |||
done | |||
(cd docs && jar cf "../$O_DOC" .) | |||
echo "Created $O_DOC." | |||
cleanup_bin |
@@ -0,0 +1,8 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<classpath> | |||
<classpathentry kind="src" path="src"/> | |||
<classpathentry exported="true" kind="lib" path="lib/args4j-2.0.9.jar" sourcepath="lib/args4j-2.0.9.zip"/> | |||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/> | |||
<classpathentry combineaccessrules="false" exported="true" kind="src" path="/org.eclipse.jgit"/> | |||
<classpathentry kind="output" path="bin"/> | |||
</classpath> |
@@ -0,0 +1 @@ | |||
/bin |
@@ -0,0 +1,17 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<projectDescription> | |||
<name>org.eclipse.jgit.pgm</name> | |||
<comment></comment> | |||
<projects> | |||
</projects> | |||
<buildSpec> | |||
<buildCommand> | |||
<name>org.eclipse.jdt.core.javabuilder</name> | |||
<arguments> | |||
</arguments> | |||
</buildCommand> | |||
</buildSpec> | |||
<natures> | |||
<nature>org.eclipse.jdt.core.javanature</nature> | |||
</natures> | |||
</projectDescription> |
@@ -0,0 +1,3 @@ | |||
#Mon Aug 11 16:46:23 PDT 2008 | |||
eclipse.preferences.version=1 | |||
encoding/<project>=UTF-8 |
@@ -0,0 +1,3 @@ | |||
#Mon Mar 24 18:55:50 EDT 2008 | |||
eclipse.preferences.version=1 | |||
line.separator=\n |
@@ -0,0 +1,321 @@ | |||
#Sun Mar 15 19:46:39 CET 2009 | |||
eclipse.preferences.version=1 | |||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled | |||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 | |||
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve | |||
org.eclipse.jdt.core.compiler.compliance=1.5 | |||
org.eclipse.jdt.core.compiler.debug.lineNumber=generate | |||
org.eclipse.jdt.core.compiler.debug.localVariable=generate | |||
org.eclipse.jdt.core.compiler.debug.sourceFile=generate | |||
org.eclipse.jdt.core.compiler.doc.comment.support=enabled | |||
org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning | |||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error | |||
org.eclipse.jdt.core.compiler.problem.autoboxing=warning | |||
org.eclipse.jdt.core.compiler.problem.deprecation=warning | |||
org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled | |||
org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled | |||
org.eclipse.jdt.core.compiler.problem.discouragedReference=warning | |||
org.eclipse.jdt.core.compiler.problem.emptyStatement=warning | |||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error | |||
org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning | |||
org.eclipse.jdt.core.compiler.problem.fieldHiding=warning | |||
org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning | |||
org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error | |||
org.eclipse.jdt.core.compiler.problem.forbiddenReference=error | |||
org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=error | |||
org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning | |||
org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning | |||
org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=error | |||
org.eclipse.jdt.core.compiler.problem.invalidJavadoc=error | |||
org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled | |||
org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled | |||
org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled | |||
org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private | |||
org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning | |||
org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error | |||
org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore | |||
org.eclipse.jdt.core.compiler.problem.missingJavadocComments=error | |||
org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled | |||
org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=protected | |||
org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=return_tag | |||
org.eclipse.jdt.core.compiler.problem.missingJavadocTags=error | |||
org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled | |||
org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=protected | |||
org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore | |||
org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning | |||
org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error | |||
org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=error | |||
org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore | |||
org.eclipse.jdt.core.compiler.problem.nullReference=warning | |||
org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning | |||
org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore | |||
org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error | |||
org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning | |||
org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore | |||
org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning | |||
org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled | |||
org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error | |||
org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled | |||
org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning | |||
org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning | |||
org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning | |||
org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning | |||
org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error | |||
org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore | |||
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning | |||
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled | |||
org.eclipse.jdt.core.compiler.problem.unusedImport=error | |||
org.eclipse.jdt.core.compiler.problem.unusedLabel=error | |||
org.eclipse.jdt.core.compiler.problem.unusedLocal=error | |||
org.eclipse.jdt.core.compiler.problem.unusedParameter=warning | |||
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled | |||
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled | |||
org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error | |||
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=error | |||
org.eclipse.jdt.core.compiler.source=1.5 | |||
org.eclipse.jdt.core.formatter.align_type_members_on_columns=false | |||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 | |||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 | |||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 | |||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 | |||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 | |||
org.eclipse.jdt.core.formatter.alignment_for_assignment=0 | |||
org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 | |||
org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 | |||
org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 | |||
org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0 | |||
org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 | |||
org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 | |||
org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 | |||
org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 | |||
org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 | |||
org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 | |||
org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 | |||
org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 | |||
org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 | |||
org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 | |||
org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 | |||
org.eclipse.jdt.core.formatter.blank_lines_after_package=1 | |||
org.eclipse.jdt.core.formatter.blank_lines_before_field=1 | |||
org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 | |||
org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 | |||
org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 | |||
org.eclipse.jdt.core.formatter.blank_lines_before_method=1 | |||
org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 | |||
org.eclipse.jdt.core.formatter.blank_lines_before_package=0 | |||
org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 | |||
org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line | |||
org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line | |||
org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line | |||
org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line | |||
org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line | |||
org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line | |||
org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line | |||
org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line | |||
org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line | |||
org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line | |||
org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line | |||
org.eclipse.jdt.core.formatter.comment.clear_blank_lines=false | |||
org.eclipse.jdt.core.formatter.comment.format_comments=true | |||
org.eclipse.jdt.core.formatter.comment.format_header=false | |||
org.eclipse.jdt.core.formatter.comment.format_html=true | |||
org.eclipse.jdt.core.formatter.comment.format_source_code=true | |||
org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true | |||
org.eclipse.jdt.core.formatter.comment.indent_root_tags=true | |||
org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert | |||
org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert | |||
org.eclipse.jdt.core.formatter.comment.line_length=80 | |||
org.eclipse.jdt.core.formatter.compact_else_if=true | |||
org.eclipse.jdt.core.formatter.continuation_indentation=2 | |||
org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 | |||
org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false | |||
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true | |||
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true | |||
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true | |||
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true | |||
org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true | |||
org.eclipse.jdt.core.formatter.indent_empty_lines=false | |||
org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true | |||
org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true | |||
org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true | |||
org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false | |||
org.eclipse.jdt.core.formatter.indentation.size=4 | |||
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert | |||
org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert | |||
org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert | |||
org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert | |||
org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert | |||
org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert | |||
org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert | |||
org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert | |||
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert | |||
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert | |||
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert | |||
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert | |||
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert | |||
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert | |||
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert | |||
org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false | |||
org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false | |||
org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false | |||
org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false | |||
org.eclipse.jdt.core.formatter.lineSplit=80 | |||
org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 | |||
org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 | |||
org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true | |||
org.eclipse.jdt.core.formatter.tabulation.char=tab | |||
org.eclipse.jdt.core.formatter.tabulation.size=4 | |||
org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false |
@@ -0,0 +1,9 @@ | |||
#Wed May 09 00:20:24 CEST 2007 | |||
eclipse.preferences.version=1 | |||
formatter_profile=_JGit | |||
formatter_settings_version=10 | |||
org.eclipse.jdt.ui.ignorelowercasenames=true | |||
org.eclipse.jdt.ui.importorder=java;javax;org;com; | |||
org.eclipse.jdt.ui.ondemandthreshold=99 | |||
org.eclipse.jdt.ui.staticondemandthreshold=99 | |||
org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?><templates/> |
@@ -0,0 +1,30 @@ | |||
org.eclipse.jgit.pgm.Branch | |||
org.eclipse.jgit.pgm.Clone | |||
org.eclipse.jgit.pgm.Daemon | |||
org.eclipse.jgit.pgm.DiffTree | |||
org.eclipse.jgit.pgm.Fetch | |||
org.eclipse.jgit.pgm.Glog | |||
org.eclipse.jgit.pgm.IndexPack | |||
org.eclipse.jgit.pgm.Init | |||
org.eclipse.jgit.pgm.Log | |||
org.eclipse.jgit.pgm.LsRemote | |||
org.eclipse.jgit.pgm.LsTree | |||
org.eclipse.jgit.pgm.MergeBase | |||
org.eclipse.jgit.pgm.Push | |||
org.eclipse.jgit.pgm.ReceivePack | |||
org.eclipse.jgit.pgm.RevList | |||
org.eclipse.jgit.pgm.RevParse | |||
org.eclipse.jgit.pgm.Rm | |||
org.eclipse.jgit.pgm.ShowRev | |||
org.eclipse.jgit.pgm.ShowRef | |||
org.eclipse.jgit.pgm.Tag | |||
org.eclipse.jgit.pgm.UploadPack | |||
org.eclipse.jgit.pgm.Version | |||
org.eclipse.jgit.pgm.debug.MakeCacheTree | |||
org.eclipse.jgit.pgm.debug.ReadDirCache | |||
org.eclipse.jgit.pgm.debug.RebuildCommitGraph | |||
org.eclipse.jgit.pgm.debug.ShowCacheTree | |||
org.eclipse.jgit.pgm.debug.ShowCommands | |||
org.eclipse.jgit.pgm.debug.ShowDirCache | |||
org.eclipse.jgit.pgm.debug.WriteDirCache |
@@ -0,0 +1,137 @@ | |||
/* | |||
* Copyright (C) 2008, Charles O'Farrell <charleso@charleso.org> | |||
* Copyright (C) 2008-2009, Google Inc. | |||
* Copyright (C) 2008, Marek Zawirski <marek.zawirski@gmail.com> | |||
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm; | |||
import org.kohsuke.args4j.Option; | |||
import org.eclipse.jgit.lib.Constants; | |||
import org.eclipse.jgit.lib.ObjectId; | |||
import org.eclipse.jgit.lib.RefUpdate; | |||
import org.eclipse.jgit.transport.FetchResult; | |||
import org.eclipse.jgit.transport.TrackingRefUpdate; | |||
import org.eclipse.jgit.transport.Transport; | |||
abstract class AbstractFetchCommand extends TextBuiltin { | |||
@Option(name = "--verbose", aliases = { "-v" }, usage = "be more verbose") | |||
private boolean verbose; | |||
protected void showFetchResult(final Transport tn, final FetchResult r) { | |||
boolean shownURI = false; | |||
for (final TrackingRefUpdate u : r.getTrackingRefUpdates()) { | |||
if (!verbose && u.getResult() == RefUpdate.Result.NO_CHANGE) | |||
continue; | |||
final char type = shortTypeOf(u.getResult()); | |||
final String longType = longTypeOf(u); | |||
final String src = abbreviateRef(u.getRemoteName(), false); | |||
final String dst = abbreviateRef(u.getLocalName(), true); | |||
if (!shownURI) { | |||
out.print("From "); | |||
out.print(tn.getURI()); | |||
out.println(); | |||
shownURI = true; | |||
} | |||
out.format(" %c %-17s %-10s -> %s", type, longType, src, dst); | |||
out.println(); | |||
} | |||
} | |||
private String longTypeOf(final TrackingRefUpdate u) { | |||
final RefUpdate.Result r = u.getResult(); | |||
if (r == RefUpdate.Result.LOCK_FAILURE) | |||
return "[lock fail]"; | |||
if (r == RefUpdate.Result.IO_FAILURE) | |||
return "[i/o error]"; | |||
if (r == RefUpdate.Result.REJECTED) | |||
return "[rejected]"; | |||
if (ObjectId.zeroId().equals(u.getNewObjectId())) | |||
return "[deleted]"; | |||
if (r == RefUpdate.Result.NEW) { | |||
if (u.getRemoteName().startsWith(Constants.R_HEADS)) | |||
return "[new branch]"; | |||
else if (u.getLocalName().startsWith(Constants.R_TAGS)) | |||
return "[new tag]"; | |||
return "[new]"; | |||
} | |||
if (r == RefUpdate.Result.FORCED) { | |||
final String aOld = u.getOldObjectId().abbreviate(db).name(); | |||
final String aNew = u.getNewObjectId().abbreviate(db).name(); | |||
return aOld + "..." + aNew; | |||
} | |||
if (r == RefUpdate.Result.FAST_FORWARD) { | |||
final String aOld = u.getOldObjectId().abbreviate(db).name(); | |||
final String aNew = u.getNewObjectId().abbreviate(db).name(); | |||
return aOld + ".." + aNew; | |||
} | |||
if (r == RefUpdate.Result.NO_CHANGE) | |||
return "[up to date]"; | |||
return "[" + r.name() + "]"; | |||
} | |||
private static char shortTypeOf(final RefUpdate.Result r) { | |||
if (r == RefUpdate.Result.LOCK_FAILURE) | |||
return '!'; | |||
if (r == RefUpdate.Result.IO_FAILURE) | |||
return '!'; | |||
if (r == RefUpdate.Result.NEW) | |||
return '*'; | |||
if (r == RefUpdate.Result.FORCED) | |||
return '+'; | |||
if (r == RefUpdate.Result.FAST_FORWARD) | |||
return ' '; | |||
if (r == RefUpdate.Result.REJECTED) | |||
return '!'; | |||
if (r == RefUpdate.Result.NO_CHANGE) | |||
return '='; | |||
return ' '; | |||
} | |||
} |
@@ -0,0 +1,216 @@ | |||
/* | |||
* Copyright (C) 2007-2008, Charles O'Farrell <charleso@charleso.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm; | |||
import java.io.IOException; | |||
import java.util.ArrayList; | |||
import java.util.LinkedHashMap; | |||
import java.util.List; | |||
import java.util.Map; | |||
import java.util.Map.Entry; | |||
import org.kohsuke.args4j.Argument; | |||
import org.kohsuke.args4j.ExampleMode; | |||
import org.kohsuke.args4j.Option; | |||
import org.eclipse.jgit.lib.Constants; | |||
import org.eclipse.jgit.lib.ObjectId; | |||
import org.eclipse.jgit.lib.Ref; | |||
import org.eclipse.jgit.lib.RefComparator; | |||
import org.eclipse.jgit.lib.RefUpdate; | |||
import org.eclipse.jgit.lib.Repository; | |||
import org.eclipse.jgit.lib.RefUpdate.Result; | |||
import org.eclipse.jgit.pgm.opt.CmdLineParser; | |||
import org.eclipse.jgit.revwalk.RevWalk; | |||
@Command(common = true, usage = "List, create, or delete branches") | |||
class Branch extends TextBuiltin { | |||
@Option(name = "--remote", aliases = { "-r" }, usage = "act on remote-tracking branches") | |||
private boolean remote = false; | |||
@Option(name = "--all", aliases = { "-a" }, usage = "list both remote-tracking and local branches") | |||
private boolean all = false; | |||
@Option(name = "--delete", aliases = { "-d" }, usage = "delete fully merged branch") | |||
private boolean delete = false; | |||
@Option(name = "--delete-force", aliases = { "-D" }, usage = "delete branch (even if not merged)") | |||
private boolean deleteForce = false; | |||
@Option(name = "--create-force", aliases = { "-f" }, usage = "force create branch even exists") | |||
private boolean createForce = false; | |||
@Option(name = "--verbose", aliases = { "-v" }, usage = "be verbose") | |||
private boolean verbose = false; | |||
@Argument | |||
private List<String> branches = new ArrayList<String>(); | |||
private final Map<String, Ref> printRefs = new LinkedHashMap<String, Ref>(); | |||
/** Only set for verbose branch listing at-the-moment */ | |||
private RevWalk rw; | |||
private int maxNameLength; | |||
@Override | |||
protected void run() throws Exception { | |||
if (delete || deleteForce) | |||
delete(deleteForce); | |||
else { | |||
if (branches.size() > 2) | |||
throw die("Too many refs given\n" + new CmdLineParser(this).printExample(ExampleMode.ALL)); | |||
if (branches.size() > 0) { | |||
String newHead = branches.get(0); | |||
String startBranch; | |||
if (branches.size() == 2) | |||
startBranch = branches.get(1); | |||
else | |||
startBranch = Constants.HEAD; | |||
Ref startRef = db.getRef(startBranch); | |||
ObjectId startAt = db.resolve(startBranch + "^0"); | |||
if (startRef != null) | |||
startBranch = startRef.getName(); | |||
else | |||
startBranch = startAt.name(); | |||
startBranch = db.shortenRefName(startBranch); | |||
String newRefName = newHead; | |||
if (!newRefName.startsWith(Constants.R_HEADS)) | |||
newRefName = Constants.R_HEADS + newRefName; | |||
if (!Repository.isValidRefName(newRefName)) | |||
throw die(String.format("%s is not a valid ref name", newRefName)); | |||
if (!createForce && db.resolve(newRefName) != null) | |||
throw die(String.format("branch %s already exists", newHead)); | |||
RefUpdate updateRef = db.updateRef(newRefName); | |||
updateRef.setNewObjectId(startAt); | |||
updateRef.setForceUpdate(createForce); | |||
updateRef.setRefLogMessage("branch: Created from " + startBranch, false); | |||
Result update = updateRef.update(); | |||
if (update == Result.REJECTED) | |||
throw die(String.format("Could not create branch %s: %s", newHead, update.toString())); | |||
} else { | |||
if (verbose) | |||
rw = new RevWalk(db); | |||
list(); | |||
} | |||
} | |||
} | |||
private void list() throws Exception { | |||
Map<String, Ref> refs = db.getAllRefs(); | |||
Ref head = refs.get(Constants.HEAD); | |||
// This can happen if HEAD is stillborn | |||
if (head != null) { | |||
String current = head.getName(); | |||
if (current.equals(Constants.HEAD)) | |||
addRef("(no branch)", head); | |||
addRefs(refs, Constants.R_HEADS, !remote); | |||
addRefs(refs, Constants.R_REMOTES, remote); | |||
for (final Entry<String, Ref> e : printRefs.entrySet()) { | |||
final Ref ref = e.getValue(); | |||
printHead(e.getKey(), current.equals(ref.getName()), ref); | |||
} | |||
} | |||
} | |||
private void addRefs(final Map<String, Ref> allRefs, final String prefix, | |||
final boolean add) { | |||
if (all || add) { | |||
for (final Ref ref : RefComparator.sort(allRefs.values())) { | |||
final String name = ref.getName(); | |||
if (name.startsWith(prefix)) | |||
addRef(name.substring(name.indexOf('/', 5) + 1), ref); | |||
} | |||
} | |||
} | |||
private void addRef(final String name, final Ref ref) { | |||
printRefs.put(name, ref); | |||
maxNameLength = Math.max(maxNameLength, name.length()); | |||
} | |||
private void printHead(final String ref, final boolean isCurrent, | |||
final Ref refObj) throws Exception { | |||
out.print(isCurrent ? '*' : ' '); | |||
out.print(' '); | |||
out.print(ref); | |||
if (verbose) { | |||
final int spaces = maxNameLength - ref.length() + 1; | |||
out.print(String.format("%" + spaces + "s", "")); | |||
final ObjectId objectId = refObj.getObjectId(); | |||
out.print(objectId.abbreviate(db).name()); | |||
out.print(' '); | |||
out.print(rw.parseCommit(objectId).getShortMessage()); | |||
} | |||
out.println(); | |||
} | |||
private void delete(boolean force) throws IOException { | |||
String current = db.getBranch(); | |||
ObjectId head = db.resolve(Constants.HEAD); | |||
for (String branch : branches) { | |||
if (current.equals(branch)) { | |||
String err = "Cannot delete the branch '%s' which you are currently on."; | |||
throw die(String.format(err, branch)); | |||
} | |||
RefUpdate update = db.updateRef((remote ? Constants.R_REMOTES | |||
: Constants.R_HEADS) | |||
+ branch); | |||
update.setNewObjectId(head); | |||
update.setForceUpdate(force || remote); | |||
Result result = update.delete(); | |||
if (result == Result.REJECTED) { | |||
String err = "The branch '%s' is not an ancestor of your current HEAD.\n" | |||
+ "If you are sure you want to delete it, run 'jgit branch -D %1$s'."; | |||
throw die(String.format(err, branch)); | |||
} else if (result == Result.NEW) | |||
throw die(String.format("branch '%s' not found.", branch)); | |||
if (remote) | |||
out.println(String.format("Deleted remote branch %s", branch)); | |||
else if (verbose) | |||
out.println(String.format("Deleted branch %s", branch)); | |||
} | |||
} | |||
} |
@@ -0,0 +1,187 @@ | |||
/* | |||
* Copyright (C) 2008-2009, Google Inc. | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm; | |||
import java.io.File; | |||
import java.io.IOException; | |||
import java.net.URISyntaxException; | |||
import java.util.ArrayList; | |||
import java.util.Collections; | |||
import java.util.List; | |||
import org.kohsuke.args4j.Argument; | |||
import org.kohsuke.args4j.Option; | |||
import org.eclipse.jgit.errors.NotSupportedException; | |||
import org.eclipse.jgit.errors.TransportException; | |||
import org.eclipse.jgit.lib.Commit; | |||
import org.eclipse.jgit.lib.Constants; | |||
import org.eclipse.jgit.lib.GitIndex; | |||
import org.eclipse.jgit.lib.Ref; | |||
import org.eclipse.jgit.lib.RefComparator; | |||
import org.eclipse.jgit.lib.RefUpdate; | |||
import org.eclipse.jgit.lib.Repository; | |||
import org.eclipse.jgit.lib.TextProgressMonitor; | |||
import org.eclipse.jgit.lib.Tree; | |||
import org.eclipse.jgit.lib.WorkDirCheckout; | |||
import org.eclipse.jgit.transport.FetchResult; | |||
import org.eclipse.jgit.transport.RefSpec; | |||
import org.eclipse.jgit.transport.RemoteConfig; | |||
import org.eclipse.jgit.transport.Transport; | |||
import org.eclipse.jgit.transport.URIish; | |||
@Command(common = true, usage = "Clone a repository into a new directory") | |||
class Clone extends AbstractFetchCommand { | |||
@Option(name = "--origin", aliases = { "-o" }, metaVar = "name", usage = "use <name> instead of 'origin' to track upstream") | |||
private String remoteName = "origin"; | |||
@Argument(index = 0, required = true, metaVar = "uri-ish") | |||
private String sourceUri; | |||
@Argument(index = 1, metaVar = "directory") | |||
private String localName; | |||
@Override | |||
protected final boolean requiresRepository() { | |||
return false; | |||
} | |||
@Override | |||
protected void run() throws Exception { | |||
if (localName != null && gitdir != null) | |||
throw die("conflicting usage of --git-dir and arguments"); | |||
final URIish uri = new URIish(sourceUri); | |||
if (localName == null) { | |||
String p = uri.getPath(); | |||
while (p.endsWith("/")) | |||
p = p.substring(0, p.length() - 1); | |||
final int s = p.lastIndexOf('/'); | |||
if (s < 0) | |||
throw die("cannot guess local name from " + sourceUri); | |||
localName = p.substring(s + 1); | |||
if (localName.endsWith(".git")) | |||
localName = localName.substring(0, localName.length() - 4); | |||
} | |||
if (gitdir == null) | |||
gitdir = new File(localName, ".git"); | |||
db = new Repository(gitdir); | |||
db.create(); | |||
db.getConfig().setBoolean("core", null, "bare", false); | |||
db.getConfig().save(); | |||
out.println("Initialized empty Git repository in " | |||
+ gitdir.getAbsolutePath()); | |||
out.flush(); | |||
saveRemote(uri); | |||
final FetchResult r = runFetch(); | |||
final Ref branch = guessHEAD(r); | |||
doCheckout(branch); | |||
} | |||
private void saveRemote(final URIish uri) throws URISyntaxException, | |||
IOException { | |||
final RemoteConfig rc = new RemoteConfig(db.getConfig(), remoteName); | |||
rc.addURI(uri); | |||
rc.addFetchRefSpec(new RefSpec().setForceUpdate(true) | |||
.setSourceDestination(Constants.R_HEADS + "*", | |||
Constants.R_REMOTES + remoteName + "/*")); | |||
rc.update(db.getConfig()); | |||
db.getConfig().save(); | |||
} | |||
private FetchResult runFetch() throws NotSupportedException, | |||
URISyntaxException, TransportException { | |||
final Transport tn = Transport.open(db, remoteName); | |||
final FetchResult r; | |||
try { | |||
r = tn.fetch(new TextProgressMonitor(), null); | |||
} finally { | |||
tn.close(); | |||
} | |||
showFetchResult(tn, r); | |||
return r; | |||
} | |||
private Ref guessHEAD(final FetchResult result) { | |||
final Ref idHEAD = result.getAdvertisedRef(Constants.HEAD); | |||
final List<Ref> availableRefs = new ArrayList<Ref>(); | |||
Ref head = null; | |||
for (final Ref r : result.getAdvertisedRefs()) { | |||
final String n = r.getName(); | |||
if (!n.startsWith(Constants.R_HEADS)) | |||
continue; | |||
availableRefs.add(r); | |||
if (idHEAD == null || head != null) | |||
continue; | |||
if (r.getObjectId().equals(idHEAD.getObjectId())) | |||
head = r; | |||
} | |||
Collections.sort(availableRefs, RefComparator.INSTANCE); | |||
if (idHEAD != null && head == null) | |||
head = idHEAD; | |||
return head; | |||
} | |||
private void doCheckout(final Ref branch) throws IOException { | |||
if (branch == null) | |||
throw die("cannot checkout; no HEAD advertised by remote"); | |||
if (!Constants.HEAD.equals(branch.getName())) | |||
db.writeSymref(Constants.HEAD, branch.getName()); | |||
final Commit commit = db.mapCommit(branch.getObjectId()); | |||
final RefUpdate u = db.updateRef(Constants.HEAD); | |||
u.setNewObjectId(commit.getCommitId()); | |||
u.forceUpdate(); | |||
final GitIndex index = new GitIndex(db); | |||
final Tree tree = commit.getTree(); | |||
final WorkDirCheckout co; | |||
co = new WorkDirCheckout(db, db.getWorkDir(), index, tree); | |||
co.checkout(); | |||
index.write(); | |||
} | |||
} |
@@ -0,0 +1,78 @@ | |||
/* | |||
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm; | |||
import static java.lang.annotation.ElementType.TYPE; | |||
import static java.lang.annotation.RetentionPolicy.RUNTIME; | |||
import java.lang.annotation.Retention; | |||
import java.lang.annotation.Target; | |||
/** | |||
* Annotation to document a {@link TextBuiltin}. | |||
* <p> | |||
* This is an optional annotation for TextBuiltin subclasses and it carries | |||
* documentation forward into the runtime system describing what the command is | |||
* and why users may want to invoke it. | |||
*/ | |||
@Retention(RUNTIME) | |||
@Target( { TYPE }) | |||
public @interface Command { | |||
/** | |||
* @return name the command is invoked as from the command line. If the | |||
* (default) empty string is supplied the name will be generated | |||
* from the class name. | |||
*/ | |||
public String name() default ""; | |||
/** | |||
* @return one line description of the command's feature set. | |||
*/ | |||
public String usage() default ""; | |||
/** | |||
* @return true if this command is considered to be commonly used. | |||
*/ | |||
public boolean common() default false; | |||
} |
@@ -0,0 +1,194 @@ | |||
/* | |||
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm; | |||
import java.io.BufferedReader; | |||
import java.io.IOException; | |||
import java.io.InputStream; | |||
import java.io.InputStreamReader; | |||
import java.net.URL; | |||
import java.util.ArrayList; | |||
import java.util.Arrays; | |||
import java.util.Collection; | |||
import java.util.Comparator; | |||
import java.util.Enumeration; | |||
import java.util.HashMap; | |||
import java.util.Map; | |||
import java.util.Vector; | |||
/** | |||
* List of all commands known by jgit's command line tools. | |||
* <p> | |||
* Commands are implementations of {@link TextBuiltin}, with an optional | |||
* {@link Command} class annotation to insert additional documentation or | |||
* override the default command name (which is guessed from the class name). | |||
* <p> | |||
* Commands may be registered by adding them to a services file in the same JAR | |||
* (or classes directory) as the command implementation. The service file name | |||
* is <code>META-INF/services/org.eclipse.jgit.pgm.TextBuiltin</code> and it | |||
* contains one concrete implementation class name per line. | |||
* <p> | |||
* Command registration is identical to Java 6's services, however the catalog | |||
* uses a lightweight wrapper to delay creating a command instance as much as | |||
* possible. This avoids initializing the AWT or SWT GUI toolkits even if the | |||
* command's constructor might require them. | |||
*/ | |||
public class CommandCatalog { | |||
private static final CommandCatalog INSTANCE = new CommandCatalog(); | |||
/** | |||
* Locate a single command by its user friendly name. | |||
* | |||
* @param name | |||
* name of the command. Typically in dash-lower-case-form, which | |||
* was derived from the DashLowerCaseForm class name. | |||
* @return the command instance; null if no command exists by that name. | |||
*/ | |||
public static CommandRef get(final String name) { | |||
return INSTANCE.commands.get(name); | |||
} | |||
/** | |||
* @return all known commands, sorted by command name. | |||
*/ | |||
public static CommandRef[] all() { | |||
return toSortedArray(INSTANCE.commands.values()); | |||
} | |||
/** | |||
* @return all common commands, sorted by command name. | |||
*/ | |||
public static CommandRef[] common() { | |||
final ArrayList<CommandRef> common = new ArrayList<CommandRef>(); | |||
for (final CommandRef c : INSTANCE.commands.values()) | |||
if (c.isCommon()) | |||
common.add(c); | |||
return toSortedArray(common); | |||
} | |||
private static CommandRef[] toSortedArray(final Collection<CommandRef> c) { | |||
final CommandRef[] r = c.toArray(new CommandRef[c.size()]); | |||
Arrays.sort(r, new Comparator<CommandRef>() { | |||
public int compare(final CommandRef o1, final CommandRef o2) { | |||
return o1.getName().compareTo(o2.getName()); | |||
} | |||
}); | |||
return r; | |||
} | |||
private final ClassLoader ldr; | |||
private final Map<String, CommandRef> commands; | |||
private CommandCatalog() { | |||
ldr = Thread.currentThread().getContextClassLoader(); | |||
commands = new HashMap<String, CommandRef>(); | |||
final Enumeration<URL> catalogs = catalogs(); | |||
while (catalogs.hasMoreElements()) | |||
scan(catalogs.nextElement()); | |||
} | |||
private Enumeration<URL> catalogs() { | |||
try { | |||
final String pfx = "META-INF/services/"; | |||
return ldr.getResources(pfx + TextBuiltin.class.getName()); | |||
} catch (IOException err) { | |||
return new Vector<URL>().elements(); | |||
} | |||
} | |||
private void scan(final URL cUrl) { | |||
final BufferedReader cIn; | |||
try { | |||
final InputStream in = cUrl.openStream(); | |||
cIn = new BufferedReader(new InputStreamReader(in, "UTF-8")); | |||
} catch (IOException err) { | |||
// If we cannot read from the service list, go to the next. | |||
// | |||
return; | |||
} | |||
try { | |||
String line; | |||
while ((line = cIn.readLine()) != null) { | |||
if (line.length() > 0 && !line.startsWith("#")) | |||
load(line); | |||
} | |||
} catch (IOException err) { | |||
// If we failed during a read, ignore the error. | |||
// | |||
} finally { | |||
try { | |||
cIn.close(); | |||
} catch (IOException e) { | |||
// Ignore the close error; we are only reading. | |||
} | |||
} | |||
} | |||
private void load(final String cn) { | |||
final Class<? extends TextBuiltin> clazz; | |||
try { | |||
clazz = Class.forName(cn, false, ldr).asSubclass(TextBuiltin.class); | |||
} catch (ClassNotFoundException notBuiltin) { | |||
// Doesn't exist, even though the service entry is present. | |||
// | |||
return; | |||
} catch (ClassCastException notBuiltin) { | |||
// Isn't really a builtin, even though its listed as such. | |||
// | |||
return; | |||
} | |||
final CommandRef cr; | |||
final Command a = clazz.getAnnotation(Command.class); | |||
if (a != null) | |||
cr = new CommandRef(clazz, a); | |||
else | |||
cr = new CommandRef(clazz); | |||
commands.put(cr.getName(), cr); | |||
} | |||
} |
@@ -0,0 +1,164 @@ | |||
/* | |||
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm; | |||
import java.lang.reflect.Constructor; | |||
import java.lang.reflect.InvocationTargetException; | |||
/** | |||
* Description of a command (a {@link TextBuiltin} subclass. | |||
* <p> | |||
* These descriptions are lightweight compared to creating a command instance | |||
* and are therefore suitable for catalogs of "known" commands without linking | |||
* the command's implementation and creating a dummy instance of the command. | |||
*/ | |||
public class CommandRef { | |||
private final Class<? extends TextBuiltin> impl; | |||
private final String name; | |||
private String usage; | |||
boolean common; | |||
CommandRef(final Class<? extends TextBuiltin> clazz) { | |||
this(clazz, guessName(clazz)); | |||
} | |||
CommandRef(final Class<? extends TextBuiltin> clazz, final Command cmd) { | |||
this(clazz, cmd.name().length() > 0 ? cmd.name() : guessName(clazz)); | |||
usage = cmd.usage(); | |||
common = cmd.common(); | |||
} | |||
private CommandRef(final Class<? extends TextBuiltin> clazz, final String cn) { | |||
impl = clazz; | |||
name = cn; | |||
usage = ""; | |||
} | |||
private static String guessName(final Class<? extends TextBuiltin> clazz) { | |||
final StringBuilder s = new StringBuilder(); | |||
if (clazz.getName().startsWith("org.eclipse.jgit.pgm.debug.")) | |||
s.append("debug-"); | |||
boolean lastWasDash = true; | |||
for (final char c : clazz.getSimpleName().toCharArray()) { | |||
if (Character.isUpperCase(c)) { | |||
if (!lastWasDash) | |||
s.append('-'); | |||
lastWasDash = !lastWasDash; | |||
s.append(Character.toLowerCase(c)); | |||
} else { | |||
s.append(c); | |||
} | |||
} | |||
return s.toString(); | |||
} | |||
/** | |||
* @return name the command is invoked as from the command line. | |||
*/ | |||
public String getName() { | |||
return name; | |||
} | |||
/** | |||
* @return one line description of the command's feature set. | |||
*/ | |||
public String getUsage() { | |||
return usage; | |||
} | |||
/** | |||
* @return true if this command is considered to be commonly used. | |||
*/ | |||
public boolean isCommon() { | |||
return common; | |||
} | |||
/** | |||
* @return name of the Java class which implements this command. | |||
*/ | |||
public String getImplementationClassName() { | |||
return impl.getName(); | |||
} | |||
/** | |||
* @return loader for {@link #getImplementationClassName()}. | |||
*/ | |||
public ClassLoader getImplementationClassLoader() { | |||
return impl.getClassLoader(); | |||
} | |||
/** | |||
* @return a new instance of the command implementation. | |||
*/ | |||
public TextBuiltin create() { | |||
final Constructor<? extends TextBuiltin> c; | |||
try { | |||
c = impl.getDeclaredConstructor(); | |||
} catch (SecurityException e) { | |||
throw new RuntimeException("Cannot create command " + getName(), e); | |||
} catch (NoSuchMethodException e) { | |||
throw new RuntimeException("Cannot create command " + getName(), e); | |||
} | |||
c.setAccessible(true); | |||
final TextBuiltin r; | |||
try { | |||
r = c.newInstance(); | |||
} catch (InstantiationException e) { | |||
throw new RuntimeException("Cannot create command " + getName(), e); | |||
} catch (IllegalAccessException e) { | |||
throw new RuntimeException("Cannot create command " + getName(), e); | |||
} catch (IllegalArgumentException e) { | |||
throw new RuntimeException("Cannot create command " + getName(), e); | |||
} catch (InvocationTargetException e) { | |||
throw new RuntimeException("Cannot create command " + getName(), e); | |||
} | |||
r.setCommandName(getName()); | |||
return r; | |||
} | |||
} |
@@ -0,0 +1,125 @@ | |||
/* | |||
* Copyright (C) 2008-2009, Google Inc. | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm; | |||
import java.io.File; | |||
import java.net.InetSocketAddress; | |||
import java.util.ArrayList; | |||
import java.util.List; | |||
import org.kohsuke.args4j.Argument; | |||
import org.kohsuke.args4j.Option; | |||
import org.eclipse.jgit.transport.DaemonService; | |||
@Command(common = true, usage = "Export repositories over git://") | |||
class Daemon extends TextBuiltin { | |||
@Option(name = "--port", metaVar = "PORT", usage = "port number to listen on") | |||
int port = org.eclipse.jgit.transport.Daemon.DEFAULT_PORT; | |||
@Option(name = "--listen", metaVar = "HOSTNAME", usage = "hostname (or ip) to listen on") | |||
String host; | |||
@Option(name = "--timeout", metaVar = "SECONDS", usage = "abort connection if no activity") | |||
int timeout = -1; | |||
@Option(name = "--enable", metaVar = "SERVICE", usage = "enable the service in all repositories", multiValued = true) | |||
final List<String> enable = new ArrayList<String>(); | |||
@Option(name = "--disable", metaVar = "SERVICE", usage = "disable the service in all repositories", multiValued = true) | |||
final List<String> disable = new ArrayList<String>(); | |||
@Option(name = "--allow-override", metaVar = "SERVICE", usage = "configure the service in daemon.servicename", multiValued = true) | |||
final List<String> canOverride = new ArrayList<String>(); | |||
@Option(name = "--forbid-override", metaVar = "SERVICE", usage = "configure the service in daemon.servicename", multiValued = true) | |||
final List<String> forbidOverride = new ArrayList<String>(); | |||
@Option(name = "--export-all", usage = "export without git-daemon-export-ok") | |||
boolean exportAll; | |||
@Argument(required = true, metaVar = "DIRECTORY", usage = "directories to export") | |||
final List<File> directory = new ArrayList<File>(); | |||
@Override | |||
protected boolean requiresRepository() { | |||
return false; | |||
} | |||
@Override | |||
protected void run() throws Exception { | |||
final org.eclipse.jgit.transport.Daemon d; | |||
d = new org.eclipse.jgit.transport.Daemon( | |||
host != null ? new InetSocketAddress(host, port) | |||
: new InetSocketAddress(port)); | |||
d.setExportAll(exportAll); | |||
if (0 <= timeout) | |||
d.setTimeout(timeout); | |||
for (final String n : enable) | |||
service(d, n).setEnabled(true); | |||
for (final String n : disable) | |||
service(d, n).setEnabled(false); | |||
for (final String n : canOverride) | |||
service(d, n).setOverridable(true); | |||
for (final String n : forbidOverride) | |||
service(d, n).setOverridable(false); | |||
for (final File f : directory) { | |||
out.println("Exporting " + f.getAbsolutePath()); | |||
d.exportDirectory(f); | |||
} | |||
d.start(); | |||
out.println("Listening on " + d.getAddress()); | |||
} | |||
private DaemonService service(final org.eclipse.jgit.transport.Daemon d, | |||
final String n) { | |||
final DaemonService svc = d.getService(n); | |||
if (svc == null) | |||
throw die("Service '" + n + "' not supported"); | |||
return svc; | |||
} | |||
} |
@@ -0,0 +1,65 @@ | |||
/* | |||
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm; | |||
/** | |||
* Indicates a {@link TextBuiltin} implementation has failed during execution. | |||
* <p> | |||
* Typically the stack trace for a Die exception is not shown to the user as it | |||
* may indicate a simple error condition that the end-user can fix on their own, | |||
* without needing a screen of Java stack frames. | |||
*/ | |||
public class Die extends RuntimeException { | |||
private static final long serialVersionUID = 1L; | |||
/** | |||
* Construct a new message explaining what has gone wrong. | |||
* | |||
* @param why | |||
* the message to show to the end-user. | |||
*/ | |||
public Die(final String why) { | |||
super(why); | |||
} | |||
} |
@@ -0,0 +1,119 @@ | |||
/* | |||
* Copyright (C) 2008, Jonas Fonseca <fonseca@diku.dk> | |||
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm; | |||
import java.util.ArrayList; | |||
import java.util.List; | |||
import org.kohsuke.args4j.Argument; | |||
import org.kohsuke.args4j.Option; | |||
import org.eclipse.jgit.lib.FileMode; | |||
import org.eclipse.jgit.pgm.opt.PathTreeFilterHandler; | |||
import org.eclipse.jgit.treewalk.AbstractTreeIterator; | |||
import org.eclipse.jgit.treewalk.TreeWalk; | |||
import org.eclipse.jgit.treewalk.filter.AndTreeFilter; | |||
import org.eclipse.jgit.treewalk.filter.TreeFilter; | |||
class DiffTree extends TextBuiltin { | |||
@Option(name = "--recursive", usage = "recurse into subtrees", aliases = { "-r" }) | |||
private boolean recursive; | |||
@Argument(index = 0, metaVar = "tree-ish", required = true) | |||
void tree_0(final AbstractTreeIterator c) { | |||
trees.add(c); | |||
} | |||
@Argument(index = 1, metaVar = "tree-ish", required = true) | |||
private final List<AbstractTreeIterator> trees = new ArrayList<AbstractTreeIterator>(); | |||
@Option(name = "--", metaVar = "path", multiValued = true, handler = PathTreeFilterHandler.class) | |||
private TreeFilter pathFilter = TreeFilter.ALL; | |||
@Override | |||
protected void run() throws Exception { | |||
final TreeWalk walk = new TreeWalk(db); | |||
walk.reset(); | |||
walk.setRecursive(recursive); | |||
for (final AbstractTreeIterator i : trees) | |||
walk.addTree(i); | |||
walk.setFilter(AndTreeFilter.create(TreeFilter.ANY_DIFF, pathFilter)); | |||
final int nTree = walk.getTreeCount(); | |||
while (walk.next()) { | |||
for (int i = 1; i < nTree; i++) | |||
out.print(':'); | |||
for (int i = 0; i < nTree; i++) { | |||
final FileMode m = walk.getFileMode(i); | |||
final String s = m.toString(); | |||
for (int pad = 6 - s.length(); pad > 0; pad--) | |||
out.print('0'); | |||
out.print(s); | |||
out.print(' '); | |||
} | |||
for (int i = 0; i < nTree; i++) { | |||
out.print(walk.getObjectId(i).name()); | |||
out.print(' '); | |||
} | |||
char chg = 'M'; | |||
if (nTree == 2) { | |||
final int m0 = walk.getRawMode(0); | |||
final int m1 = walk.getRawMode(1); | |||
if (m0 == 0 && m1 != 0) | |||
chg = 'A'; | |||
else if (m0 != 0 && m1 == 0) | |||
chg = 'D'; | |||
else if (m0 != m1 && walk.idEqual(0, 1)) | |||
chg = 'T'; | |||
} | |||
out.print(chg); | |||
out.print('\t'); | |||
out.print(walk.getPathString()); | |||
out.println(); | |||
} | |||
} | |||
} |
@@ -0,0 +1,111 @@ | |||
/* | |||
* Copyright (C) 2008-2009, Google Inc. | |||
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm; | |||
import java.util.List; | |||
import org.kohsuke.args4j.Argument; | |||
import org.kohsuke.args4j.Option; | |||
import org.eclipse.jgit.lib.TextProgressMonitor; | |||
import org.eclipse.jgit.transport.FetchResult; | |||
import org.eclipse.jgit.transport.RefSpec; | |||
import org.eclipse.jgit.transport.Transport; | |||
@Command(common = true, usage = "Update remote refs from another repository") | |||
class Fetch extends AbstractFetchCommand { | |||
@Option(name = "--timeout", metaVar = "SECONDS", usage = "abort connection if no activity") | |||
int timeout = -1; | |||
@Option(name = "--fsck", usage = "perform fsck style checks on receive") | |||
private Boolean fsck; | |||
@Option(name = "--no-fsck") | |||
void nofsck(final boolean ignored) { | |||
fsck = Boolean.FALSE; | |||
} | |||
@Option(name = "--prune", usage = "prune stale tracking refs") | |||
private Boolean prune; | |||
@Option(name = "--dry-run") | |||
private boolean dryRun; | |||
@Option(name = "--thin", usage = "fetch thin pack") | |||
private Boolean thin; | |||
@Option(name = "--no-thin") | |||
void nothin(final boolean ignored) { | |||
thin = Boolean.FALSE; | |||
} | |||
@Argument(index = 0, metaVar = "uri-ish") | |||
private String remote = "origin"; | |||
@Argument(index = 1, metaVar = "refspec") | |||
private List<RefSpec> toget; | |||
@Override | |||
protected void run() throws Exception { | |||
final Transport tn = Transport.open(db, remote); | |||
if (fsck != null) | |||
tn.setCheckFetchedObjects(fsck.booleanValue()); | |||
if (prune != null) | |||
tn.setRemoveDeletedRefs(prune.booleanValue()); | |||
tn.setDryRun(dryRun); | |||
if (thin != null) | |||
tn.setFetchThin(thin.booleanValue()); | |||
if (0 <= timeout) | |||
tn.setTimeout(timeout); | |||
final FetchResult r; | |||
try { | |||
r = tn.fetch(new TextProgressMonitor(), toget); | |||
if (r.getTrackingRefUpdates().isEmpty()) | |||
return; | |||
} finally { | |||
tn.close(); | |||
} | |||
showFetchResult(tn, r); | |||
} | |||
} |
@@ -0,0 +1,132 @@ | |||
/* | |||
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm; | |||
import java.awt.BorderLayout; | |||
import java.awt.FlowLayout; | |||
import java.awt.event.ActionEvent; | |||
import java.awt.event.ActionListener; | |||
import java.awt.event.WindowAdapter; | |||
import java.awt.event.WindowEvent; | |||
import java.io.File; | |||
import javax.swing.JButton; | |||
import javax.swing.JFrame; | |||
import javax.swing.JPanel; | |||
import javax.swing.JScrollPane; | |||
import org.eclipse.jgit.awtui.CommitGraphPane; | |||
import org.eclipse.jgit.revplot.PlotWalk; | |||
import org.eclipse.jgit.revwalk.RevCommit; | |||
import org.eclipse.jgit.revwalk.RevSort; | |||
import org.eclipse.jgit.revwalk.RevWalk; | |||
class Glog extends RevWalkTextBuiltin { | |||
final JFrame frame; | |||
final CommitGraphPane graphPane; | |||
Glog() { | |||
frame = new JFrame(); | |||
frame.addWindowListener(new WindowAdapter() { | |||
@Override | |||
public void windowClosing(final WindowEvent e) { | |||
frame.dispose(); | |||
} | |||
}); | |||
graphPane = new CommitGraphPane(); | |||
final JScrollPane graphScroll = new JScrollPane(graphPane); | |||
final JPanel buttons = new JPanel(new FlowLayout()); | |||
final JButton repaint = new JButton(); | |||
repaint.setText("Repaint"); | |||
repaint.addActionListener(new ActionListener() { | |||
public void actionPerformed(ActionEvent e) { | |||
graphPane.repaint(); | |||
} | |||
}); | |||
buttons.add(repaint); | |||
final JPanel world = new JPanel(new BorderLayout()); | |||
world.add(buttons, BorderLayout.SOUTH); | |||
world.add(graphScroll, BorderLayout.CENTER); | |||
frame.getContentPane().add(world); | |||
} | |||
@Override | |||
protected int walkLoop() throws Exception { | |||
graphPane.getCommitList().source(walk); | |||
graphPane.getCommitList().fillTo(Integer.MAX_VALUE); | |||
frame.setTitle("[" + repoName() + "]"); | |||
frame.pack(); | |||
frame.setVisible(true); | |||
return graphPane.getCommitList().size(); | |||
} | |||
@Override | |||
protected void show(final RevCommit c) throws Exception { | |||
throw new UnsupportedOperationException(); | |||
} | |||
@Override | |||
protected RevWalk createWalk() { | |||
if (objects) | |||
throw die("Cannot use --objects with glog"); | |||
final PlotWalk w = new PlotWalk(db); | |||
w.sort(RevSort.BOUNDARY, true); | |||
return w; | |||
} | |||
private String repoName() { | |||
final File f = db.getDirectory(); | |||
String n = f.getName(); | |||
if (".git".equals(n)) | |||
n = f.getParentFile().getName(); | |||
return n; | |||
} | |||
} |
@@ -0,0 +1,76 @@ | |||
/* | |||
* Copyright (C) 2009, Google Inc. | |||
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm; | |||
import java.io.BufferedInputStream; | |||
import java.io.File; | |||
import org.kohsuke.args4j.Argument; | |||
import org.kohsuke.args4j.Option; | |||
import org.eclipse.jgit.lib.TextProgressMonitor; | |||
class IndexPack extends TextBuiltin { | |||
@Option(name = "--fix-thin", usage = "fix a thin pack to be complete") | |||
private boolean fixThin; | |||
@Option(name = "--index-version", usage = "index file format to create") | |||
private int indexVersion = -1; | |||
@Argument(index = 0, required = true, metaVar = "base") | |||
private File base; | |||
@Override | |||
protected void run() throws Exception { | |||
if (indexVersion == -1) | |||
indexVersion = db.getConfig().getCore().getPackIndexVersion(); | |||
final BufferedInputStream in; | |||
final org.eclipse.jgit.transport.IndexPack ip; | |||
in = new BufferedInputStream(System.in); | |||
ip = new org.eclipse.jgit.transport.IndexPack(db, in, base); | |||
ip.setFixThin(fixThin); | |||
ip.setIndexVersion(indexVersion); | |||
ip.index(new TextProgressMonitor()); | |||
} | |||
} |
@@ -0,0 +1,71 @@ | |||
/* | |||
* Copyright (C) 2009, Constantine Plotnikov <constantine.plotnikov@gmail.com> | |||
* Copyright (C) 2008, Google Inc. | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm; | |||
import java.io.File; | |||
import org.kohsuke.args4j.Option; | |||
import org.eclipse.jgit.lib.Repository; | |||
@Command(common = true, usage = "Create an empty git repository") | |||
class Init extends TextBuiltin { | |||
@Option(name = "--bare", usage = "Create a bare repository") | |||
private boolean bare; | |||
@Override | |||
protected final boolean requiresRepository() { | |||
return false; | |||
} | |||
@Override | |||
protected void run() throws Exception { | |||
if (gitdir == null) | |||
gitdir = new File(bare ? "." : ".git"); | |||
db = new Repository(gitdir); | |||
db.create(bare); | |||
out.println("Initialized empty Git repository in " | |||
+ gitdir.getAbsolutePath()); | |||
} | |||
} |
@@ -0,0 +1,129 @@ | |||
/* | |||
* Copyright (C) 2006-2008, Robin Rosenberg <robin.rosenberg@dewire.com> | |||
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm; | |||
import java.text.DateFormat; | |||
import java.text.SimpleDateFormat; | |||
import java.util.Collection; | |||
import java.util.Iterator; | |||
import java.util.Locale; | |||
import java.util.Map; | |||
import java.util.Set; | |||
import java.util.TimeZone; | |||
import org.kohsuke.args4j.Option; | |||
import org.eclipse.jgit.lib.AnyObjectId; | |||
import org.eclipse.jgit.lib.PersonIdent; | |||
import org.eclipse.jgit.lib.Ref; | |||
import org.eclipse.jgit.revwalk.RevCommit; | |||
import org.eclipse.jgit.revwalk.RevWalk; | |||
@Command(common = true, usage = "View commit history") | |||
class Log extends RevWalkTextBuiltin { | |||
private final TimeZone myTZ = TimeZone.getDefault(); | |||
private final DateFormat fmt; | |||
private Map<AnyObjectId, Set<Ref>> allRefsByPeeledObjectId; | |||
@Option(name="--decorate", usage="Show ref names matching commits") | |||
private boolean decorate; | |||
Log() { | |||
fmt = new SimpleDateFormat("EEE MMM dd HH:mm:ss yyyy ZZZZZ", Locale.US); | |||
} | |||
@Override | |||
protected RevWalk createWalk() { | |||
RevWalk ret = super.createWalk(); | |||
if (decorate) | |||
allRefsByPeeledObjectId = getRepository().getAllRefsByPeeledObjectId(); | |||
return ret; | |||
} | |||
@Override | |||
protected void show(final RevCommit c) throws Exception { | |||
out.print("commit "); | |||
c.getId().copyTo(outbuffer, out); | |||
if (decorate) { | |||
Collection<Ref> list = allRefsByPeeledObjectId.get(c.copy()); | |||
if (list != null) { | |||
out.print(" ("); | |||
for (Iterator<Ref> i = list.iterator(); i.hasNext(); ) { | |||
out.print(i.next().getOrigName()); | |||
if (i.hasNext()) | |||
out.print(" "); | |||
} | |||
out.print(")"); | |||
} | |||
} | |||
out.println(); | |||
final PersonIdent author = c.getAuthorIdent(); | |||
out.print("Author: "); | |||
out.print(author.getName()); | |||
out.print(" <"); | |||
out.print(author.getEmailAddress()); | |||
out.print(">"); | |||
out.println(); | |||
final TimeZone authorTZ = author.getTimeZone(); | |||
fmt.setTimeZone(authorTZ != null ? authorTZ : myTZ); | |||
out.print("Date: "); | |||
out.print(fmt.format(author.getWhen())); | |||
out.println(); | |||
out.println(); | |||
final String[] lines = c.getFullMessage().split("\n"); | |||
for (final String s : lines) { | |||
out.print(" "); | |||
out.print(s); | |||
out.println(); | |||
} | |||
out.println(); | |||
out.flush(); | |||
} | |||
} |
@@ -0,0 +1,86 @@ | |||
/* | |||
* Copyright (C) 2009, Google Inc. | |||
* Copyright (C) 2008, Jonas Fonseca <fonseca@diku.dk> | |||
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm; | |||
import org.kohsuke.args4j.Argument; | |||
import org.kohsuke.args4j.Option; | |||
import org.eclipse.jgit.lib.AnyObjectId; | |||
import org.eclipse.jgit.lib.Ref; | |||
import org.eclipse.jgit.transport.FetchConnection; | |||
import org.eclipse.jgit.transport.Transport; | |||
class LsRemote extends TextBuiltin { | |||
@Option(name = "--timeout", metaVar = "SECONDS", usage = "abort connection if no activity") | |||
int timeout = -1; | |||
@Argument(index = 0, metaVar = "uri-ish", required = true) | |||
private String remote; | |||
@Override | |||
protected void run() throws Exception { | |||
final Transport tn = Transport.open(db, remote); | |||
if (0 <= timeout) | |||
tn.setTimeout(timeout); | |||
final FetchConnection c = tn.openFetch(); | |||
try { | |||
for (final Ref r : c.getRefs()) { | |||
show(r.getObjectId(), r.getName()); | |||
if (r.getPeeledObjectId() != null) | |||
show(r.getPeeledObjectId(), r.getName() + "^{}"); | |||
} | |||
} finally { | |||
c.close(); | |||
tn.close(); | |||
} | |||
} | |||
private void show(final AnyObjectId id, final String name) { | |||
out.print(id.name()); | |||
out.print('\t'); | |||
out.print(name); | |||
out.println(); | |||
} | |||
} |
@@ -0,0 +1,85 @@ | |||
/* | |||
* Copyright (C) 2008, Jonas Fonseca <fonseca@diku.dk> | |||
* Copyright (C) 2008, Robin Rosenberg <robin.rosenberg@dewire.com> | |||
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm; | |||
import org.kohsuke.args4j.Argument; | |||
import org.kohsuke.args4j.Option; | |||
import org.eclipse.jgit.lib.Constants; | |||
import org.eclipse.jgit.lib.FileMode; | |||
import org.eclipse.jgit.treewalk.AbstractTreeIterator; | |||
import org.eclipse.jgit.treewalk.TreeWalk; | |||
class LsTree extends TextBuiltin { | |||
@Option(name = "--recursive", usage = "recurse into subtrees", aliases = { "-r" }) | |||
private boolean recursive; | |||
@Argument(index = 0, required = true, metaVar = "tree-ish") | |||
private AbstractTreeIterator tree; | |||
@Override | |||
protected void run() throws Exception { | |||
final TreeWalk walk = new TreeWalk(db); | |||
walk.reset(); // drop the first empty tree, which we do not need here | |||
walk.setRecursive(recursive); | |||
walk.addTree(tree); | |||
while (walk.next()) { | |||
final FileMode mode = walk.getFileMode(0); | |||
if (mode == FileMode.TREE) | |||
out.print('0'); | |||
out.print(mode); | |||
out.print(' '); | |||
out.print(Constants.typeString(mode.getObjectType())); | |||
out.print(' '); | |||
out.print(walk.getObjectId(0).name()); | |||
out.print('\t'); | |||
out.print(walk.getPathString()); | |||
out.println(); | |||
} | |||
} | |||
} |
@@ -0,0 +1,184 @@ | |||
/* | |||
* Copyright (C) 2008-2009, Google Inc. | |||
* Copyright (C) 2008, Marek Zawirski <marek.zawirski@gmail.com> | |||
* Copyright (C) 2006, Robin Rosenberg <robin.rosenberg@dewire.com> | |||
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm; | |||
import java.io.File; | |||
import java.util.ArrayList; | |||
import java.util.List; | |||
import org.kohsuke.args4j.Argument; | |||
import org.kohsuke.args4j.CmdLineException; | |||
import org.kohsuke.args4j.ExampleMode; | |||
import org.kohsuke.args4j.Option; | |||
import org.eclipse.jgit.awtui.AwtAuthenticator; | |||
import org.eclipse.jgit.errors.TransportException; | |||
import org.eclipse.jgit.lib.Repository; | |||
import org.eclipse.jgit.pgm.opt.CmdLineParser; | |||
import org.eclipse.jgit.pgm.opt.SubcommandHandler; | |||
import org.eclipse.jgit.util.HttpSupport; | |||
/** Command line entry point. */ | |||
public class Main { | |||
@Option(name = "--help", usage = "display this help text", aliases = { "-h" }) | |||
private boolean help; | |||
@Option(name = "--show-stack-trace", usage = "display the Java stack trace on exceptions") | |||
private boolean showStackTrace; | |||
@Option(name = "--git-dir", metaVar = "GIT_DIR", usage = "set the git repository to operate on") | |||
private File gitdir; | |||
@Argument(index = 0, metaVar = "command", required = true, handler = SubcommandHandler.class) | |||
private TextBuiltin subcommand; | |||
@Argument(index = 1, metaVar = "ARG") | |||
private List<String> arguments = new ArrayList<String>(); | |||
/** | |||
* Execute the command line. | |||
* | |||
* @param argv | |||
* arguments. | |||
*/ | |||
public static void main(final String[] argv) { | |||
final Main me = new Main(); | |||
try { | |||
AwtAuthenticator.install(); | |||
HttpSupport.configureHttpProxy(); | |||
me.execute(argv); | |||
} catch (Die err) { | |||
System.err.println("fatal: " + err.getMessage()); | |||
if (me.showStackTrace) | |||
err.printStackTrace(); | |||
System.exit(128); | |||
} catch (Exception err) { | |||
if (!me.showStackTrace && err.getCause() != null | |||
&& err instanceof TransportException) | |||
System.err.println("fatal: " + err.getCause().getMessage()); | |||
if (err.getClass().getName().startsWith("org.eclipse.jgit.errors.")) { | |||
System.err.println("fatal: " + err.getMessage()); | |||
if (me.showStackTrace) | |||
err.printStackTrace(); | |||
System.exit(128); | |||
} | |||
err.printStackTrace(); | |||
System.exit(1); | |||
} | |||
} | |||
private void execute(final String[] argv) throws Exception { | |||
final CmdLineParser clp = new CmdLineParser(this); | |||
try { | |||
clp.parseArgument(argv); | |||
} catch (CmdLineException err) { | |||
if (argv.length > 0 && !help) { | |||
System.err.println("fatal: " + err.getMessage()); | |||
System.exit(1); | |||
} | |||
} | |||
if (argv.length == 0 || help) { | |||
final String ex = clp.printExample(ExampleMode.ALL); | |||
System.err.println("jgit" + ex + " command [ARG ...]"); | |||
if (help) { | |||
System.err.println(); | |||
clp.printUsage(System.err); | |||
System.err.println(); | |||
} else if (subcommand == null) { | |||
System.err.println(); | |||
System.err.println("The most commonly used commands are:"); | |||
final CommandRef[] common = CommandCatalog.common(); | |||
int width = 0; | |||
for (final CommandRef c : common) | |||
width = Math.max(width, c.getName().length()); | |||
width += 2; | |||
for (final CommandRef c : common) { | |||
System.err.print(' '); | |||
System.err.print(c.getName()); | |||
for (int i = c.getName().length(); i < width; i++) | |||
System.err.print(' '); | |||
System.err.print(c.getUsage()); | |||
System.err.println(); | |||
} | |||
System.err.println(); | |||
} | |||
System.exit(1); | |||
} | |||
final TextBuiltin cmd = subcommand; | |||
if (cmd.requiresRepository()) { | |||
if (gitdir == null) | |||
gitdir = findGitDir(); | |||
if (gitdir == null || !gitdir.isDirectory()) { | |||
System.err.println("error: can't find git directory"); | |||
System.exit(1); | |||
} | |||
cmd.init(new Repository(gitdir), gitdir); | |||
} else { | |||
cmd.init(null, gitdir); | |||
} | |||
try { | |||
cmd.execute(arguments.toArray(new String[arguments.size()])); | |||
} finally { | |||
if (cmd.out != null) | |||
cmd.out.flush(); | |||
} | |||
} | |||
private static File findGitDir() { | |||
File current = new File(".").getAbsoluteFile(); | |||
while (current != null) { | |||
final File gitDir = new File(current, ".git"); | |||
if (gitDir.isDirectory()) | |||
return gitDir; | |||
current = current.getParentFile(); | |||
} | |||
return null; | |||
} | |||
} |
@@ -0,0 +1,80 @@ | |||
/* | |||
* Copyright (C) 2008, Jonas Fonseca <fonseca@diku.dk> | |||
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm; | |||
import java.util.ArrayList; | |||
import java.util.List; | |||
import org.kohsuke.args4j.Argument; | |||
import org.kohsuke.args4j.Option; | |||
import org.eclipse.jgit.revwalk.RevCommit; | |||
import org.eclipse.jgit.revwalk.filter.RevFilter; | |||
class MergeBase extends TextBuiltin { | |||
@Option(name = "--all", usage = "display all possible merge bases") | |||
private boolean all; | |||
@Argument(index = 0, metaVar = "commit-ish", required = true) | |||
void commit_0(final RevCommit c) { | |||
commits.add(c); | |||
} | |||
@Argument(index = 1, metaVar = "commit-ish", required = true) | |||
private final List<RevCommit> commits = new ArrayList<RevCommit>(); | |||
@Override | |||
protected void run() throws Exception { | |||
for (final RevCommit c : commits) | |||
argWalk.markStart(c); | |||
argWalk.setRevFilter(RevFilter.MERGE_BASE); | |||
int max = all ? Integer.MAX_VALUE : 1; | |||
while (max-- > 0) { | |||
final RevCommit b = argWalk.next(); | |||
if (b == null) | |||
break; | |||
out.println(b.getId().name()); | |||
} | |||
} | |||
} |
@@ -0,0 +1,256 @@ | |||
/* | |||
* Copyright (C) 2008, Marek Zawirski <marek.zawirski@gmail.com> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm; | |||
import java.util.ArrayList; | |||
import java.util.Collection; | |||
import java.util.List; | |||
import org.kohsuke.args4j.Argument; | |||
import org.kohsuke.args4j.Option; | |||
import org.eclipse.jgit.lib.Constants; | |||
import org.eclipse.jgit.lib.Ref; | |||
import org.eclipse.jgit.lib.TextProgressMonitor; | |||
import org.eclipse.jgit.transport.PushResult; | |||
import org.eclipse.jgit.transport.RefSpec; | |||
import org.eclipse.jgit.transport.RemoteRefUpdate; | |||
import org.eclipse.jgit.transport.Transport; | |||
import org.eclipse.jgit.transport.URIish; | |||
import org.eclipse.jgit.transport.RemoteRefUpdate.Status; | |||
@Command(common = true, usage = "Update remote repository from local refs") | |||
class Push extends TextBuiltin { | |||
@Option(name = "--timeout", metaVar = "SECONDS", usage = "abort connection if no activity") | |||
int timeout = -1; | |||
@Argument(index = 0, metaVar = "uri-ish") | |||
private String remote = "origin"; | |||
@Argument(index = 1, metaVar = "refspec") | |||
private final List<RefSpec> refSpecs = new ArrayList<RefSpec>(); | |||
@Option(name = "--all") | |||
void addAll(final boolean ignored) { | |||
refSpecs.add(Transport.REFSPEC_PUSH_ALL); | |||
} | |||
@Option(name = "--tags") | |||
void addTags(final boolean ignored) { | |||
refSpecs.add(Transport.REFSPEC_TAGS); | |||
} | |||
@Option(name = "--verbose", aliases = { "-v" }) | |||
private boolean verbose = false; | |||
@Option(name = "--thin") | |||
private boolean thin = Transport.DEFAULT_PUSH_THIN; | |||
@Option(name = "--no-thin") | |||
void nothin(final boolean ignored) { | |||
thin = false; | |||
} | |||
@Option(name = "--force", aliases = { "-f" }) | |||
private boolean force; | |||
@Option(name = "--receive-pack", metaVar = "path") | |||
private String receivePack; | |||
@Option(name = "--dry-run") | |||
private boolean dryRun; | |||
private boolean shownURI; | |||
@Override | |||
protected void run() throws Exception { | |||
if (force) { | |||
final List<RefSpec> orig = new ArrayList<RefSpec>(refSpecs); | |||
refSpecs.clear(); | |||
for (final RefSpec spec : orig) | |||
refSpecs.add(spec.setForceUpdate(true)); | |||
} | |||
final List<Transport> transports; | |||
transports = Transport.openAll(db, remote, Transport.Operation.PUSH); | |||
for (final Transport transport : transports) { | |||
if (0 <= timeout) | |||
transport.setTimeout(timeout); | |||
transport.setPushThin(thin); | |||
if (receivePack != null) | |||
transport.setOptionReceivePack(receivePack); | |||
transport.setDryRun(dryRun); | |||
final Collection<RemoteRefUpdate> toPush = transport | |||
.findRemoteRefUpdatesFor(refSpecs); | |||
final URIish uri = transport.getURI(); | |||
final PushResult result; | |||
try { | |||
result = transport.push(new TextProgressMonitor(), toPush); | |||
} finally { | |||
transport.close(); | |||
} | |||
printPushResult(uri, result); | |||
} | |||
} | |||
private void printPushResult(final URIish uri, | |||
final PushResult result) { | |||
shownURI = false; | |||
boolean everythingUpToDate = true; | |||
// at first, print up-to-date ones... | |||
for (final RemoteRefUpdate rru : result.getRemoteUpdates()) { | |||
if (rru.getStatus() == Status.UP_TO_DATE) { | |||
if (verbose) | |||
printRefUpdateResult(uri, result, rru); | |||
} else | |||
everythingUpToDate = false; | |||
} | |||
for (final RemoteRefUpdate rru : result.getRemoteUpdates()) { | |||
// ...then successful updates... | |||
if (rru.getStatus() == Status.OK) | |||
printRefUpdateResult(uri, result, rru); | |||
} | |||
for (final RemoteRefUpdate rru : result.getRemoteUpdates()) { | |||
// ...finally, others (problematic) | |||
if (rru.getStatus() != Status.OK | |||
&& rru.getStatus() != Status.UP_TO_DATE) | |||
printRefUpdateResult(uri, result, rru); | |||
} | |||
if (everythingUpToDate) | |||
out.println("Everything up-to-date"); | |||
} | |||
private void printRefUpdateResult(final URIish uri, | |||
final PushResult result, final RemoteRefUpdate rru) { | |||
if (!shownURI) { | |||
shownURI = true; | |||
out.format("To %s\n", uri); | |||
} | |||
final String remoteName = rru.getRemoteName(); | |||
final String srcRef = rru.isDelete() ? null : rru.getSrcRef(); | |||
switch (rru.getStatus()) { | |||
case OK: | |||
if (rru.isDelete()) | |||
printUpdateLine('-', "[deleted]", null, remoteName, null); | |||
else { | |||
final Ref oldRef = result.getAdvertisedRef(remoteName); | |||
if (oldRef == null) { | |||
final String summary; | |||
if (remoteName.startsWith(Constants.R_TAGS)) | |||
summary = "[new tag]"; | |||
else | |||
summary = "[new branch]"; | |||
printUpdateLine('*', summary, srcRef, remoteName, null); | |||
} else { | |||
boolean fastForward = rru.isFastForward(); | |||
final char flag = fastForward ? ' ' : '+'; | |||
final String summary = oldRef.getObjectId().abbreviate(db) | |||
.name() | |||
+ (fastForward ? ".." : "...") | |||
+ rru.getNewObjectId().abbreviate(db).name(); | |||
final String message = fastForward ? null : "forced update"; | |||
printUpdateLine(flag, summary, srcRef, remoteName, message); | |||
} | |||
} | |||
break; | |||
case NON_EXISTING: | |||
printUpdateLine('X', "[no match]", null, remoteName, null); | |||
break; | |||
case REJECTED_NODELETE: | |||
printUpdateLine('!', "[rejected]", null, remoteName, | |||
"remote side does not support deleting refs"); | |||
break; | |||
case REJECTED_NONFASTFORWARD: | |||
printUpdateLine('!', "[rejected]", srcRef, remoteName, | |||
"non-fast forward"); | |||
break; | |||
case REJECTED_REMOTE_CHANGED: | |||
final String message = "remote ref object changed - is not expected one " | |||
+ rru.getExpectedOldObjectId().abbreviate(db).name(); | |||
printUpdateLine('!', "[rejected]", srcRef, remoteName, message); | |||
break; | |||
case REJECTED_OTHER_REASON: | |||
printUpdateLine('!', "[remote rejected]", srcRef, remoteName, rru | |||
.getMessage()); | |||
break; | |||
case UP_TO_DATE: | |||
if (verbose) | |||
printUpdateLine('=', "[up to date]", srcRef, remoteName, null); | |||
break; | |||
case NOT_ATTEMPTED: | |||
case AWAITING_REPORT: | |||
printUpdateLine('?', "[unexpected push-process behavior]", srcRef, | |||
remoteName, rru.getMessage()); | |||
break; | |||
} | |||
} | |||
private void printUpdateLine(final char flag, final String summary, | |||
final String srcRef, final String destRef, final String message) { | |||
out.format(" %c %-17s", flag, summary); | |||
if (srcRef != null) | |||
out.format(" %s ->", abbreviateRef(srcRef, true)); | |||
out.format(" %s", abbreviateRef(destRef, true)); | |||
if (message != null) | |||
out.format(" (%s)", message); | |||
out.println(); | |||
} | |||
} |
@@ -0,0 +1,74 @@ | |||
/* | |||
* Copyright (C) 2008-2009, Google Inc. | |||
* Copyright (C) 2009, Robin Rosenberg <robin.rosenberg@dewire.com> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm; | |||
import java.io.File; | |||
import org.kohsuke.args4j.Argument; | |||
import org.eclipse.jgit.lib.Repository; | |||
@Command(common = false, usage = "Server side backend for 'jgit push'") | |||
class ReceivePack extends TextBuiltin { | |||
@Argument(index = 0, required = true, metaVar = "DIRECTORY", usage = "Repository to receive into") | |||
File dstGitdir; | |||
@Override | |||
protected final boolean requiresRepository() { | |||
return false; | |||
} | |||
@Override | |||
protected void run() throws Exception { | |||
final org.eclipse.jgit.transport.ReceivePack rp; | |||
if (new File(dstGitdir, ".git").isDirectory()) | |||
dstGitdir = new File(dstGitdir, ".git"); | |||
db = new Repository(dstGitdir); | |||
if (!db.getObjectsDirectory().isDirectory()) | |||
throw die("'" + dstGitdir.getPath() + "' not a git repository"); | |||
rp = new org.eclipse.jgit.transport.ReceivePack(db); | |||
rp.receive(System.in, System.out, System.err); | |||
} | |||
} |
@@ -0,0 +1,81 @@ | |||
/* | |||
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm; | |||
import org.eclipse.jgit.revwalk.ObjectWalk; | |||
import org.eclipse.jgit.revwalk.RevCommit; | |||
import org.eclipse.jgit.revwalk.RevFlag; | |||
import org.eclipse.jgit.revwalk.RevObject; | |||
import org.eclipse.jgit.revwalk.RevTree; | |||
class RevList extends RevWalkTextBuiltin { | |||
@Override | |||
protected void show(final RevCommit c) throws Exception { | |||
if (c.has(RevFlag.UNINTERESTING)) | |||
out.print('-'); | |||
c.getId().copyTo(outbuffer, out); | |||
if (parents) | |||
for (int i = 0; i < c.getParentCount(); i++) { | |||
out.print(' '); | |||
c.getParent(i).getId().copyTo(outbuffer, out); | |||
} | |||
out.println(); | |||
} | |||
@Override | |||
protected void show(final ObjectWalk ow, final RevObject obj) | |||
throws Exception { | |||
if (obj.has(RevFlag.UNINTERESTING)) | |||
out.print('-'); | |||
obj.getId().copyTo(outbuffer, out); | |||
final String path = ow.getPathString(); | |||
if (path != null) { | |||
out.print(' '); | |||
out.print(path); | |||
} else if (obj instanceof RevTree) | |||
out.print(' '); | |||
out.println(); | |||
} | |||
} |
@@ -0,0 +1,74 @@ | |||
/* | |||
* Copyright (C) 2009, Daniel Cheng (aka SDiZ) <git@sdiz.net> | |||
* Copyright (C) 2009, Daniel Cheng (aka SDiZ) <j16sdiz+freenet@gmail.com> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm; | |||
import java.util.ArrayList; | |||
import java.util.List; | |||
import java.util.Map; | |||
import org.kohsuke.args4j.Argument; | |||
import org.kohsuke.args4j.Option; | |||
import org.eclipse.jgit.lib.ObjectId; | |||
import org.eclipse.jgit.lib.Ref; | |||
class RevParse extends TextBuiltin { | |||
@Option(name = "--all") | |||
boolean all = false; | |||
@Argument(index = 0, metaVar = "commit-ish") | |||
private final List<ObjectId> commits = new ArrayList<ObjectId>(); | |||
@Override | |||
protected void run() throws Exception { | |||
if (all) { | |||
Map<String, Ref> allRefs = db.getAllRefs(); | |||
for (final Ref r : allRefs.values()) | |||
out.println(r.getObjectId().name()); | |||
} else { | |||
for (final ObjectId o : commits) | |||
out.println(o.name()); | |||
} | |||
} | |||
} |
@@ -0,0 +1,208 @@ | |||
/* | |||
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm; | |||
import java.util.ArrayList; | |||
import java.util.EnumSet; | |||
import java.util.List; | |||
import org.kohsuke.args4j.Argument; | |||
import org.kohsuke.args4j.Option; | |||
import org.eclipse.jgit.lib.Constants; | |||
import org.eclipse.jgit.lib.ObjectId; | |||
import org.eclipse.jgit.pgm.opt.PathTreeFilterHandler; | |||
import org.eclipse.jgit.revwalk.ObjectWalk; | |||
import org.eclipse.jgit.revwalk.RevCommit; | |||
import org.eclipse.jgit.revwalk.RevFlag; | |||
import org.eclipse.jgit.revwalk.RevObject; | |||
import org.eclipse.jgit.revwalk.RevSort; | |||
import org.eclipse.jgit.revwalk.RevWalk; | |||
import org.eclipse.jgit.revwalk.filter.AndRevFilter; | |||
import org.eclipse.jgit.revwalk.filter.AuthorRevFilter; | |||
import org.eclipse.jgit.revwalk.filter.CommitterRevFilter; | |||
import org.eclipse.jgit.revwalk.filter.MessageRevFilter; | |||
import org.eclipse.jgit.revwalk.filter.RevFilter; | |||
import org.eclipse.jgit.treewalk.filter.AndTreeFilter; | |||
import org.eclipse.jgit.treewalk.filter.TreeFilter; | |||
abstract class RevWalkTextBuiltin extends TextBuiltin { | |||
RevWalk walk; | |||
@Option(name = "--objects") | |||
boolean objects = false; | |||
@Option(name = "--parents") | |||
boolean parents = false; | |||
@Option(name = "--total-count") | |||
boolean count = false; | |||
char[] outbuffer = new char[Constants.OBJECT_ID_LENGTH * 2]; | |||
private final EnumSet<RevSort> sorting = EnumSet.noneOf(RevSort.class); | |||
private void enableRevSort(final RevSort type, final boolean on) { | |||
if (on) | |||
sorting.add(type); | |||
else | |||
sorting.remove(type); | |||
} | |||
@Option(name = "--date-order") | |||
void enableDateOrder(final boolean on) { | |||
enableRevSort(RevSort.COMMIT_TIME_DESC, on); | |||
} | |||
@Option(name = "--topo-order") | |||
void enableTopoOrder(final boolean on) { | |||
enableRevSort(RevSort.TOPO, on); | |||
} | |||
@Option(name = "--reverse") | |||
void enableReverse(final boolean on) { | |||
enableRevSort(RevSort.REVERSE, on); | |||
} | |||
@Option(name = "--boundary") | |||
void enableBoundary(final boolean on) { | |||
enableRevSort(RevSort.BOUNDARY, on); | |||
} | |||
@Argument(index = 0, metaVar = "commit-ish") | |||
private final List<RevCommit> commits = new ArrayList<RevCommit>(); | |||
@Option(name = "--", metaVar = "path", multiValued = true, handler = PathTreeFilterHandler.class) | |||
private TreeFilter pathFilter = TreeFilter.ALL; | |||
private final List<RevFilter> revLimiter = new ArrayList<RevFilter>(); | |||
@Option(name = "--author") | |||
void addAuthorRevFilter(final String who) { | |||
revLimiter.add(AuthorRevFilter.create(who)); | |||
} | |||
@Option(name = "--committer") | |||
void addCommitterRevFilter(final String who) { | |||
revLimiter.add(CommitterRevFilter.create(who)); | |||
} | |||
@Option(name = "--grep") | |||
void addCMessageRevFilter(final String msg) { | |||
revLimiter.add(MessageRevFilter.create(msg)); | |||
} | |||
@Override | |||
protected void run() throws Exception { | |||
walk = createWalk(); | |||
for (final RevSort s : sorting) | |||
walk.sort(s, true); | |||
if (pathFilter != TreeFilter.ALL) | |||
walk.setTreeFilter(AndTreeFilter.create(pathFilter, | |||
TreeFilter.ANY_DIFF)); | |||
if (revLimiter.size() == 1) | |||
walk.setRevFilter(revLimiter.get(0)); | |||
else if (revLimiter.size() > 1) | |||
walk.setRevFilter(AndRevFilter.create(revLimiter)); | |||
if (commits.isEmpty()) { | |||
final ObjectId head = db.resolve(Constants.HEAD); | |||
if (head == null) | |||
throw die("Cannot resolve " + Constants.HEAD); | |||
commits.add(walk.parseCommit(head)); | |||
} | |||
for (final RevCommit c : commits) { | |||
final RevCommit real = argWalk == walk ? c : walk.parseCommit(c); | |||
if (c.has(RevFlag.UNINTERESTING)) | |||
walk.markUninteresting(real); | |||
else | |||
walk.markStart(real); | |||
} | |||
final long start = System.currentTimeMillis(); | |||
final int n = walkLoop(); | |||
if (count) { | |||
final long end = System.currentTimeMillis(); | |||
System.err.print(n); | |||
System.err.print(' '); | |||
System.err.print(end - start); | |||
System.err.print(" ms"); | |||
System.err.println(); | |||
} | |||
} | |||
protected RevWalk createWalk() { | |||
if (objects) | |||
return new ObjectWalk(db); | |||
if (argWalk == null) | |||
argWalk = new RevWalk(db); | |||
return argWalk; | |||
} | |||
protected int walkLoop() throws Exception { | |||
int n = 0; | |||
for (final RevCommit c : walk) { | |||
n++; | |||
show(c); | |||
} | |||
if (walk instanceof ObjectWalk) { | |||
final ObjectWalk ow = (ObjectWalk) walk; | |||
for (;;) { | |||
final RevObject obj = ow.nextObject(); | |||
if (obj == null) | |||
break; | |||
show(ow, obj); | |||
} | |||
} | |||
return n; | |||
} | |||
protected abstract void show(final RevCommit c) throws Exception; | |||
protected void show(final ObjectWalk objectWalk, | |||
final RevObject currentObject) throws Exception { | |||
// Do nothing by default. Most applications cannot show an object. | |||
} | |||
} |
@@ -0,0 +1,98 @@ | |||
/* | |||
* Copyright (C) 2008, Google Inc. | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm; | |||
import java.io.File; | |||
import org.kohsuke.args4j.Argument; | |||
import org.kohsuke.args4j.Option; | |||
import org.kohsuke.args4j.spi.StopOptionHandler; | |||
import org.eclipse.jgit.dircache.DirCache; | |||
import org.eclipse.jgit.dircache.DirCacheBuildIterator; | |||
import org.eclipse.jgit.dircache.DirCacheBuilder; | |||
import org.eclipse.jgit.lib.Constants; | |||
import org.eclipse.jgit.lib.FileMode; | |||
import org.eclipse.jgit.pgm.opt.PathTreeFilterHandler; | |||
import org.eclipse.jgit.treewalk.TreeWalk; | |||
import org.eclipse.jgit.treewalk.filter.TreeFilter; | |||
@Command(usage = "Stop tracking a file", common = true) | |||
class Rm extends TextBuiltin { | |||
@Argument(metaVar = "path", usage = "path", multiValued = true, required = true, handler = PathTreeFilterHandler.class) | |||
@Option(name = "--", handler = StopOptionHandler.class) | |||
private TreeFilter paths; | |||
private File root; | |||
@Override | |||
protected void run() throws Exception { | |||
root = db.getWorkDir(); | |||
final DirCache dirc = DirCache.lock(db); | |||
final DirCacheBuilder edit = dirc.builder(); | |||
final TreeWalk walk = new TreeWalk(db); | |||
walk.reset(); // drop the first empty tree, which we do not need here | |||
walk.setRecursive(true); | |||
walk.setFilter(paths); | |||
walk.addTree(new DirCacheBuildIterator(edit)); | |||
while (walk.next()) { | |||
final File path = new File(root, walk.getPathString()); | |||
final FileMode mode = walk.getFileMode(0); | |||
if (mode.getObjectType() == Constants.OBJ_BLOB) { | |||
// Deleting a blob is simply a matter of removing | |||
// the file or symlink named by the tree entry. | |||
delete(path); | |||
} | |||
} | |||
edit.commit(); | |||
} | |||
private void delete(File p) { | |||
while (p != null && !p.equals(root) && p.delete()) | |||
p = p.getParentFile(); | |||
} | |||
} |
@@ -0,0 +1,68 @@ | |||
/* | |||
* Copyright (C) 2008, Jonas Fonseca <fonseca@diku.dk> | |||
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm; | |||
import java.util.TreeMap; | |||
import org.eclipse.jgit.lib.AnyObjectId; | |||
import org.eclipse.jgit.lib.Ref; | |||
class ShowRef extends TextBuiltin { | |||
@Override | |||
protected void run() throws Exception { | |||
for (final Ref r : new TreeMap<String, Ref>(db.getAllRefs()).values()) { | |||
show(r.getObjectId(), r.getName()); | |||
if (r.getPeeledObjectId() != null) | |||
show(r.getPeeledObjectId(), r.getName() + "^{}"); | |||
} | |||
} | |||
private void show(final AnyObjectId id, final String name) { | |||
out.print(id.name()); | |||
out.print('\t'); | |||
out.print(name); | |||
out.println(); | |||
} | |||
} |
@@ -0,0 +1,100 @@ | |||
/* | |||
* Copyright (C) 2008, Charles O'Farrell <charleso@charleso.org> | |||
* Copyright (C) 2009, Google Inc. | |||
* Copyright (C) 2008, Robin Rosenberg <robin.rosenberg.lists@dewire.com> | |||
* Copyright (C) 2008, Robin Rosenberg <robin.rosenberg@dewire.com> | |||
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm; | |||
import org.kohsuke.args4j.Argument; | |||
import org.kohsuke.args4j.Option; | |||
import org.eclipse.jgit.errors.MissingObjectException; | |||
import org.eclipse.jgit.lib.Constants; | |||
import org.eclipse.jgit.lib.ObjectId; | |||
import org.eclipse.jgit.lib.ObjectLoader; | |||
import org.eclipse.jgit.lib.PersonIdent; | |||
@Command(common = true, usage = "Create a tag") | |||
class Tag extends TextBuiltin { | |||
@Option(name = "-f", usage = "force replacing an existing tag") | |||
private boolean force; | |||
@Option(name = "-m", metaVar = "message", usage = "tag message") | |||
private String message = ""; | |||
@Argument(index = 0, required = true, metaVar = "name") | |||
private String tagName; | |||
@Argument(index = 1, metaVar = "object") | |||
private ObjectId object; | |||
@Override | |||
protected void run() throws Exception { | |||
if (object == null) { | |||
object = db.resolve(Constants.HEAD); | |||
if (object == null) | |||
throw die("Cannot resolve " + Constants.HEAD); | |||
} | |||
if (!tagName.startsWith(Constants.R_TAGS)) | |||
tagName = Constants.R_TAGS + tagName; | |||
if (!force && db.resolve(tagName) != null) { | |||
throw die("fatal: tag '" | |||
+ tagName.substring(Constants.R_TAGS.length()) | |||
+ "' exists"); | |||
} | |||
final ObjectLoader ldr = db.openObject(object); | |||
if (ldr == null) | |||
throw new MissingObjectException(object, "any"); | |||
org.eclipse.jgit.lib.Tag tag = new org.eclipse.jgit.lib.Tag(db); | |||
tag.setObjId(object); | |||
tag.setType(Constants.typeString(ldr.getType())); | |||
tag.setTagger(new PersonIdent(db)); | |||
tag.setMessage(message.replaceAll("\r", "")); | |||
tag.setTag(tagName.substring(Constants.R_TAGS.length())); | |||
tag.tag(); | |||
} | |||
} |
@@ -0,0 +1,241 @@ | |||
/* | |||
* Copyright (C) 2007, Robin Rosenberg <robin.rosenberg@dewire.com> | |||
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm; | |||
import static org.eclipse.jgit.lib.Constants.R_HEADS; | |||
import static org.eclipse.jgit.lib.Constants.R_REMOTES; | |||
import static org.eclipse.jgit.lib.Constants.R_TAGS; | |||
import java.io.BufferedWriter; | |||
import java.io.File; | |||
import java.io.IOException; | |||
import java.io.OutputStreamWriter; | |||
import java.io.PrintWriter; | |||
import org.kohsuke.args4j.CmdLineException; | |||
import org.kohsuke.args4j.Option; | |||
import org.eclipse.jgit.lib.ObjectId; | |||
import org.eclipse.jgit.lib.Repository; | |||
import org.eclipse.jgit.pgm.opt.CmdLineParser; | |||
import org.eclipse.jgit.revwalk.RevWalk; | |||
/** | |||
* Abstract command which can be invoked from the command line. | |||
* <p> | |||
* Commands are configured with a single "current" repository and then the | |||
* {@link #execute(String[])} method is invoked with the arguments that appear | |||
* on the command line after the command name. | |||
* <p> | |||
* Command constructors should perform as little work as possible as they may be | |||
* invoked very early during process loading, and the command may not execute | |||
* even though it was constructed. | |||
*/ | |||
public abstract class TextBuiltin { | |||
private String commandName; | |||
@Option(name = "--help", usage = "display this help text", aliases = { "-h" }) | |||
private boolean help; | |||
/** Stream to output to, typically this is standard output. */ | |||
protected PrintWriter out; | |||
/** Git repository the command was invoked within. */ | |||
protected Repository db; | |||
/** Directory supplied via --git-dir command line option. */ | |||
protected File gitdir; | |||
/** RevWalk used during command line parsing, if it was required. */ | |||
protected RevWalk argWalk; | |||
final void setCommandName(final String name) { | |||
commandName = name; | |||
} | |||
/** @return true if {@link #db}/{@link #getRepository()} is required. */ | |||
protected boolean requiresRepository() { | |||
return true; | |||
} | |||
void init(final Repository repo, final File gd) { | |||
try { | |||
final String outputEncoding = repo != null ? repo.getConfig() | |||
.getString("i18n", null, "logOutputEncoding") : null; | |||
if (outputEncoding != null) | |||
out = new PrintWriter(new BufferedWriter( | |||
new OutputStreamWriter(System.out, outputEncoding))); | |||
else | |||
out = new PrintWriter(new BufferedWriter( | |||
new OutputStreamWriter(System.out))); | |||
} catch (IOException e) { | |||
throw die("cannot create output stream"); | |||
} | |||
if (repo != null) { | |||
db = repo; | |||
gitdir = repo.getDirectory(); | |||
} else { | |||
db = null; | |||
gitdir = gd; | |||
} | |||
} | |||
/** | |||
* Parse arguments and run this command. | |||
* | |||
* @param args | |||
* command line arguments passed after the command name. | |||
* @throws Exception | |||
* an error occurred while processing the command. The main | |||
* framework will catch the exception and print a message on | |||
* standard error. | |||
*/ | |||
public final void execute(String[] args) throws Exception { | |||
parseArguments(args); | |||
run(); | |||
} | |||
/** | |||
* Parses the command line arguments prior to running. | |||
* <p> | |||
* This method should only be invoked by {@link #execute(String[])}, prior | |||
* to calling {@link #run()}. The default implementation parses all | |||
* arguments into this object's instance fields. | |||
* | |||
* @param args | |||
* the arguments supplied on the command line, if any. | |||
*/ | |||
protected void parseArguments(final String[] args) { | |||
final CmdLineParser clp = new CmdLineParser(this); | |||
try { | |||
clp.parseArgument(args); | |||
} catch (CmdLineException err) { | |||
if (!help) { | |||
System.err.println("fatal: " + err.getMessage()); | |||
System.exit(1); | |||
} | |||
} | |||
if (help) { | |||
printUsageAndExit(clp); | |||
} | |||
argWalk = clp.getRevWalkGently(); | |||
} | |||
/** | |||
* Print the usage line | |||
* | |||
* @param clp | |||
*/ | |||
public void printUsageAndExit(final CmdLineParser clp) { | |||
printUsageAndExit("", clp); | |||
} | |||
/** | |||
* Print an error message and the usage line | |||
* | |||
* @param message | |||
* @param clp | |||
*/ | |||
public void printUsageAndExit(final String message, final CmdLineParser clp) { | |||
System.err.println(message); | |||
System.err.print("jgit "); | |||
System.err.print(commandName); | |||
clp.printSingleLineUsage(System.err); | |||
System.err.println(); | |||
System.err.println(); | |||
clp.printUsage(System.err); | |||
System.err.println(); | |||
System.exit(1); | |||
} | |||
/** | |||
* Perform the actions of this command. | |||
* <p> | |||
* This method should only be invoked by {@link #execute(String[])}. | |||
* | |||
* @throws Exception | |||
* an error occurred while processing the command. The main | |||
* framework will catch the exception and print a message on | |||
* standard error. | |||
*/ | |||
protected abstract void run() throws Exception; | |||
/** | |||
* @return the repository this command accesses. | |||
*/ | |||
public Repository getRepository() { | |||
return db; | |||
} | |||
ObjectId resolve(final String s) throws IOException { | |||
final ObjectId r = db.resolve(s); | |||
if (r == null) | |||
throw die("Not a revision: " + s); | |||
return r; | |||
} | |||
/** | |||
* @param why | |||
* textual explanation | |||
* @return a runtime exception the caller is expected to throw | |||
*/ | |||
protected static Die die(final String why) { | |||
return new Die(why); | |||
} | |||
String abbreviateRef(String dst, boolean abbreviateRemote) { | |||
if (dst.startsWith(R_HEADS)) | |||
dst = dst.substring(R_HEADS.length()); | |||
else if (dst.startsWith(R_TAGS)) | |||
dst = dst.substring(R_TAGS.length()); | |||
else if (abbreviateRemote && dst.startsWith(R_REMOTES)) | |||
dst = dst.substring(R_REMOTES.length()); | |||
return dst; | |||
} | |||
} |
@@ -0,0 +1,80 @@ | |||
/* | |||
* Copyright (C) 2008-2009, Google Inc. | |||
* Copyright (C) 2009, Robin Rosenberg <robin.rosenberg@dewire.com> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm; | |||
import java.io.File; | |||
import org.kohsuke.args4j.Argument; | |||
import org.kohsuke.args4j.Option; | |||
import org.eclipse.jgit.lib.Repository; | |||
@Command(common = false, usage = "Server side backend for 'jgit fetch'") | |||
class UploadPack extends TextBuiltin { | |||
@Option(name = "--timeout", metaVar = "SECONDS", usage = "abort connection if no activity") | |||
int timeout = -1; | |||
@Argument(index = 0, required = true, metaVar = "DIRECTORY", usage = "Repository to read from") | |||
File srcGitdir; | |||
@Override | |||
protected final boolean requiresRepository() { | |||
return false; | |||
} | |||
@Override | |||
protected void run() throws Exception { | |||
final org.eclipse.jgit.transport.UploadPack rp; | |||
if (new File(srcGitdir, ".git").isDirectory()) | |||
srcGitdir = new File(srcGitdir, ".git"); | |||
db = new Repository(srcGitdir); | |||
if (!db.getObjectsDirectory().isDirectory()) | |||
throw die("'" + srcGitdir.getPath() + "' not a git repository"); | |||
rp = new org.eclipse.jgit.transport.UploadPack(db); | |||
if (0 <= timeout) | |||
rp.setTimeout(timeout); | |||
rp.upload(System.in, System.out, System.err); | |||
} | |||
} |
@@ -0,0 +1,58 @@ | |||
/* | |||
* Copyright (C) 2008, Google Inc. | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm; | |||
@Command(common = true, usage = "Display the version of jgit") | |||
class Version extends TextBuiltin { | |||
@Override | |||
protected void run() throws Exception { | |||
final Package pkg = getClass().getPackage(); | |||
if (pkg == null || pkg.getImplementationVersion() == null) | |||
throw die("Cannot read package information."); | |||
out.print("jgit version "); | |||
out.print(pkg.getImplementationVersion()); | |||
out.println(); | |||
} | |||
} |
@@ -0,0 +1,212 @@ | |||
/* | |||
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm.build; | |||
import java.io.File; | |||
import java.io.FileInputStream; | |||
import java.io.IOException; | |||
import java.io.InputStream; | |||
import java.util.ArrayList; | |||
import java.util.Enumeration; | |||
import java.util.HashMap; | |||
import java.util.List; | |||
import java.util.Map; | |||
import java.util.zip.ZipEntry; | |||
import java.util.zip.ZipFile; | |||
import java.util.zip.ZipOutputStream; | |||
import org.kohsuke.args4j.CmdLineException; | |||
import org.kohsuke.args4j.CmdLineParser; | |||
import org.kohsuke.args4j.Option; | |||
import org.kohsuke.args4j.spi.MapOptionHandler; | |||
/** | |||
* Combines multiple JAR and directory sources into a single JAR file. | |||
* <p> | |||
* This is a crude command line utility to combine multiple JAR files into a | |||
* single JAR file, without first needing to unpack the individual JARs. | |||
* <p> | |||
* The output ZIP stream is sent to standard out and can be redirected onto the | |||
* end of a shell script which starts the JRE. | |||
*/ | |||
public class JarLinkUtil { | |||
/** | |||
* Combine multiple JARs. | |||
* | |||
* @param argv | |||
* the command line arguments indicating the files to pack. | |||
* @throws IOException | |||
* a source file could not be read. | |||
*/ | |||
public static void main(final String[] argv) throws IOException { | |||
final JarLinkUtil util = new JarLinkUtil(); | |||
final CmdLineParser clp = new CmdLineParser(util); | |||
try { | |||
clp.parseArgument(argv); | |||
} catch (CmdLineException e) { | |||
clp.printSingleLineUsage(System.err); | |||
System.exit(1); | |||
} | |||
util.run(); | |||
} | |||
@Option(name = "-include", required = true) | |||
private List<File> includes = new ArrayList<File>(); | |||
@Option(name = "-file", handler = MapOptionHandler.class) | |||
private Map<String, String> files = new HashMap<String, String>(); | |||
private final Map<String, File> chosenSources = new HashMap<String, File>(); | |||
private long creationTime; | |||
private ZipOutputStream zos; | |||
private JarLinkUtil() { | |||
// Command line utility only. | |||
} | |||
private void run() throws IOException { | |||
for (final File src : includes) { | |||
if (src.isFile()) | |||
scanJar(src); | |||
else | |||
scanDirectory(src, src, ""); | |||
} | |||
for (final Map.Entry<String, String> e : files.entrySet()) | |||
chosenSources.put(e.getKey(), new File(e.getValue())); | |||
creationTime = System.currentTimeMillis(); | |||
zos = new ZipOutputStream(System.out); | |||
zos.setLevel(9); | |||
for (final File src : includes) { | |||
if (src.isFile()) | |||
appendJar(src); | |||
else | |||
appendDirectory(src, src, ""); | |||
} | |||
for (final String name : files.keySet()) | |||
appendFile(chosenSources.get(name), name); | |||
zos.close(); | |||
} | |||
private void scanJar(final File jarPath) throws IOException { | |||
final ZipFile zf = new ZipFile(jarPath); | |||
final Enumeration<? extends ZipEntry> e = zf.entries(); | |||
while (e.hasMoreElements()) | |||
chosenSources.put(e.nextElement().getName(), jarPath); | |||
zf.close(); | |||
} | |||
private void scanDirectory(final File rootPath, final File dirPath, | |||
final String pfx) throws IOException { | |||
final File[] entries = dirPath.listFiles(); | |||
if (entries == null) | |||
return; | |||
for (final File e : entries) { | |||
if (e.getName().equals(".") || e.getName().equals("..")) | |||
continue; | |||
if (e.isDirectory()) | |||
scanDirectory(rootPath, e, pfx + e.getName() + "/"); | |||
else | |||
chosenSources.put(pfx + e.getName(), rootPath); | |||
} | |||
} | |||
private void appendJar(final File jarPath) throws IOException { | |||
final ZipFile zf = new ZipFile(jarPath); | |||
final Enumeration<? extends ZipEntry> e = zf.entries(); | |||
while (e.hasMoreElements()) { | |||
final ZipEntry ze = e.nextElement(); | |||
final String name = ze.getName(); | |||
if (chosenSources.get(name) == jarPath) | |||
appendEntry(name, ze.getSize(), ze.getTime(), zf | |||
.getInputStream(ze)); | |||
} | |||
zf.close(); | |||
} | |||
private void appendDirectory(final File rootDir, final File dirPath, | |||
final String pfx) throws IOException { | |||
final File[] entries = dirPath.listFiles(); | |||
if (entries == null) | |||
return; | |||
for (final File e : entries) { | |||
if (e.getName().equals(".") || e.getName().equals("..")) | |||
continue; | |||
if (e.isDirectory()) | |||
appendDirectory(rootDir, e, pfx + e.getName() + "/"); | |||
else if (chosenSources.get(pfx + e.getName()) == rootDir) | |||
appendFile(e, pfx + e.getName()); | |||
} | |||
} | |||
private void appendFile(final File path, final String name) | |||
throws IOException { | |||
final long len = path.length(); | |||
final InputStream is = new FileInputStream(path); | |||
appendEntry(name, len, creationTime, is); | |||
} | |||
private void appendEntry(final String name, final long len, | |||
final long time, final InputStream is) throws IOException { | |||
final ZipEntry ze = new ZipEntry(name); | |||
ze.setSize(len); | |||
ze.setTime(time); | |||
zos.putNextEntry(ze); | |||
try { | |||
final byte[] buf = new byte[4096]; | |||
int n; | |||
while ((n = is.read(buf)) >= 0) | |||
zos.write(buf, 0, n); | |||
} finally { | |||
is.close(); | |||
} | |||
zos.closeEntry(); | |||
} | |||
} |
@@ -0,0 +1,74 @@ | |||
/* | |||
* Copyright (C) 2008, Google Inc. | |||
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm.debug; | |||
import org.eclipse.jgit.dircache.DirCache; | |||
import org.eclipse.jgit.dircache.DirCacheTree; | |||
import org.eclipse.jgit.pgm.TextBuiltin; | |||
class MakeCacheTree extends TextBuiltin { | |||
@Override | |||
protected void run() throws Exception { | |||
final DirCache cache = DirCache.read(db); | |||
final DirCacheTree tree = cache.getCacheTree(true); | |||
show(tree); | |||
} | |||
private void show(final DirCacheTree tree) { | |||
out.print("\""); | |||
out.print(tree.getPathString()); | |||
out.print("\""); | |||
out.print(": "); | |||
out.print(tree.getEntrySpan()); | |||
out.print(" entries"); | |||
out.print(", "); | |||
out.print(tree.getChildCount()); | |||
out.print(" children"); | |||
out.println(); | |||
for (int i = 0; i < tree.getChildCount(); i++) | |||
show(tree.getChild(i)); | |||
} | |||
} |
@@ -0,0 +1,60 @@ | |||
/* | |||
* Copyright (C) 2008, Google Inc. | |||
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm.debug; | |||
import org.eclipse.jgit.dircache.DirCache; | |||
import org.eclipse.jgit.pgm.TextBuiltin; | |||
class ReadDirCache extends TextBuiltin { | |||
@Override | |||
protected void run() throws Exception { | |||
final int cnt = 100; | |||
final long start = System.currentTimeMillis(); | |||
for (int i = 0; i < cnt; i++) | |||
DirCache.read(db); | |||
final long end = System.currentTimeMillis(); | |||
out.println(" average " + ((end - start) / cnt) + " ms/read"); | |||
} | |||
} |
@@ -0,0 +1,313 @@ | |||
/* | |||
* Copyright (C) 2009, Google Inc. | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm.debug; | |||
import java.io.BufferedReader; | |||
import java.io.File; | |||
import java.io.FileInputStream; | |||
import java.io.IOException; | |||
import java.io.InputStreamReader; | |||
import java.util.ArrayList; | |||
import java.util.Date; | |||
import java.util.HashMap; | |||
import java.util.List; | |||
import java.util.ListIterator; | |||
import java.util.Map; | |||
import org.kohsuke.args4j.Argument; | |||
import org.kohsuke.args4j.Option; | |||
import org.eclipse.jgit.errors.MissingObjectException; | |||
import org.eclipse.jgit.errors.ObjectWritingException; | |||
import org.eclipse.jgit.lib.Commit; | |||
import org.eclipse.jgit.lib.Constants; | |||
import org.eclipse.jgit.lib.LockFile; | |||
import org.eclipse.jgit.lib.ObjectId; | |||
import org.eclipse.jgit.lib.ObjectWriter; | |||
import org.eclipse.jgit.lib.PersonIdent; | |||
import org.eclipse.jgit.lib.ProgressMonitor; | |||
import org.eclipse.jgit.lib.Ref; | |||
import org.eclipse.jgit.lib.RefUpdate; | |||
import org.eclipse.jgit.lib.RefWriter; | |||
import org.eclipse.jgit.lib.TextProgressMonitor; | |||
import org.eclipse.jgit.lib.Tree; | |||
import org.eclipse.jgit.pgm.TextBuiltin; | |||
import org.eclipse.jgit.revwalk.RevWalk; | |||
/** | |||
* Recreates a repository from another one's commit graph. | |||
* <p> | |||
* <b>Do not run this on a repository unless you want to destroy it.</b> | |||
* <p> | |||
* To create the input files, in the source repository use: | |||
* | |||
* <pre> | |||
* git for-each-ref >in.refs | |||
* git log --all '--pretty=format:%H %ct %P' >in.dag | |||
* </pre> | |||
* <p> | |||
* Run the rebuild in either an empty repository, or a clone of the source. Any | |||
* missing commits (which might be the entire graph) will be created. All refs | |||
* will be modified to match the input exactly, which means some refs may be | |||
* deleted from the current repository. | |||
* <p> | |||
*/ | |||
class RebuildCommitGraph extends TextBuiltin { | |||
private final String REALLY = "--destroy-this-repository"; | |||
@Option(name = REALLY, usage = "approve destruction of repository") | |||
boolean really; | |||
@Argument(index = 0, required = true, metaVar = "REFS", usage = "for-each-ref output") | |||
File refList; | |||
@Argument(index = 1, required = true, metaVar = "DAG", usage = "log --all '--pretty=format:%H %ct %P' output") | |||
File graph; | |||
private final ProgressMonitor pm = new TextProgressMonitor(); | |||
private Map<ObjectId, ObjectId> rewrites = new HashMap<ObjectId, ObjectId>(); | |||
@Override | |||
protected void run() throws Exception { | |||
if (!really && !db.getAllRefs().isEmpty()) { | |||
final StringBuilder m = new StringBuilder(); | |||
m.append("fatal: "); | |||
m.append("This program will destroy the repository:"); | |||
m.append("\n"); | |||
m.append("fatal:\n"); | |||
m.append("fatal: "); | |||
m.append(db.getDirectory().getAbsolutePath()); | |||
m.append("\n"); | |||
m.append("fatal:\n"); | |||
m.append("fatal: "); | |||
m.append("To continue, add "); | |||
m.append(REALLY); | |||
m.append(" to the command line"); | |||
m.append("\n"); | |||
m.append("fatal:"); | |||
System.err.println(m); | |||
throw die("Need approval to destroy current repository"); | |||
} | |||
if (!refList.isFile()) | |||
throw die("no such file: " + refList.getPath()); | |||
if (!graph.isFile()) | |||
throw die("no such file: " + graph.getPath()); | |||
recreateCommitGraph(); | |||
detachHead(); | |||
deleteAllRefs(); | |||
recreateRefs(); | |||
} | |||
private void recreateCommitGraph() throws IOException { | |||
final RevWalk rw = new RevWalk(db); | |||
final Map<ObjectId, ToRewrite> toRewrite = new HashMap<ObjectId, ToRewrite>(); | |||
List<ToRewrite> queue = new ArrayList<ToRewrite>(); | |||
final BufferedReader br = new BufferedReader(new InputStreamReader( | |||
new FileInputStream(graph), Constants.CHARSET)); | |||
try { | |||
String line; | |||
while ((line = br.readLine()) != null) { | |||
final String[] parts = line.split("[ \t]{1,}"); | |||
final ObjectId oldId = ObjectId.fromString(parts[0]); | |||
try { | |||
rw.parseCommit(oldId); | |||
// We have it already. Don't rewrite it. | |||
continue; | |||
} catch (MissingObjectException mue) { | |||
// Fall through and rewrite it. | |||
} | |||
final long time = Long.parseLong(parts[1]) * 1000L; | |||
final ObjectId[] parents = new ObjectId[parts.length - 2]; | |||
for (int i = 0; i < parents.length; i++) { | |||
parents[i] = ObjectId.fromString(parts[2 + i]); | |||
} | |||
final ToRewrite t = new ToRewrite(oldId, time, parents); | |||
toRewrite.put(oldId, t); | |||
queue.add(t); | |||
} | |||
} finally { | |||
br.close(); | |||
} | |||
pm.beginTask("Rewriting commits", queue.size()); | |||
final ObjectWriter ow = new ObjectWriter(db); | |||
final ObjectId emptyTree = ow.writeTree(new Tree(db)); | |||
final PersonIdent me = new PersonIdent("jgit rebuild-commitgraph", | |||
"rebuild-commitgraph@localhost"); | |||
while (!queue.isEmpty()) { | |||
final ListIterator<ToRewrite> itr = queue | |||
.listIterator(queue.size()); | |||
queue = new ArrayList<ToRewrite>(); | |||
REWRITE: while (itr.hasPrevious()) { | |||
final ToRewrite t = itr.previous(); | |||
final ObjectId[] newParents = new ObjectId[t.oldParents.length]; | |||
for (int k = 0; k < t.oldParents.length; k++) { | |||
final ToRewrite p = toRewrite.get(t.oldParents[k]); | |||
if (p != null) { | |||
if (p.newId == null) { | |||
// Must defer until after the parent is rewritten. | |||
queue.add(t); | |||
continue REWRITE; | |||
} else { | |||
newParents[k] = p.newId; | |||
} | |||
} else { | |||
// We have the old parent object. Use it. | |||
// | |||
newParents[k] = t.oldParents[k]; | |||
} | |||
} | |||
final Commit newc = new Commit(db); | |||
newc.setTreeId(emptyTree); | |||
newc.setAuthor(new PersonIdent(me, new Date(t.commitTime))); | |||
newc.setCommitter(newc.getAuthor()); | |||
newc.setParentIds(newParents); | |||
newc.setMessage("ORIGINAL " + t.oldId.name() + "\n"); | |||
t.newId = ow.writeCommit(newc); | |||
rewrites.put(t.oldId, t.newId); | |||
pm.update(1); | |||
} | |||
} | |||
pm.endTask(); | |||
} | |||
private static class ToRewrite { | |||
final ObjectId oldId; | |||
final long commitTime; | |||
final ObjectId[] oldParents; | |||
ObjectId newId; | |||
ToRewrite(final ObjectId o, final long t, final ObjectId[] p) { | |||
oldId = o; | |||
commitTime = t; | |||
oldParents = p; | |||
} | |||
} | |||
private void detachHead() throws IOException { | |||
final String head = db.getFullBranch(); | |||
final ObjectId id = db.resolve(Constants.HEAD); | |||
if (!ObjectId.isId(head) && id != null) { | |||
final LockFile lf; | |||
lf = new LockFile(new File(db.getDirectory(), Constants.HEAD)); | |||
if (!lf.lock()) | |||
throw new IOException("Cannot lock HEAD"); | |||
lf.write(id); | |||
if (!lf.commit()) | |||
throw new IOException("Cannot deatch HEAD"); | |||
} | |||
} | |||
private void deleteAllRefs() throws Exception { | |||
final RevWalk rw = new RevWalk(db); | |||
for (final Ref r : db.getAllRefs().values()) { | |||
if (Constants.HEAD.equals(r.getName())) | |||
continue; | |||
final RefUpdate u = db.updateRef(r.getName()); | |||
u.setForceUpdate(true); | |||
u.delete(rw); | |||
} | |||
} | |||
private void recreateRefs() throws Exception { | |||
final Map<String, Ref> refs = computeNewRefs(); | |||
new RefWriter(refs.values()) { | |||
@Override | |||
protected void writeFile(final String name, final byte[] content) | |||
throws IOException { | |||
final File file = new File(db.getDirectory(), name); | |||
final LockFile lck = new LockFile(file); | |||
if (!lck.lock()) | |||
throw new ObjectWritingException("Can't write " + file); | |||
try { | |||
lck.write(content); | |||
} catch (IOException ioe) { | |||
throw new ObjectWritingException("Can't write " + file); | |||
} | |||
if (!lck.commit()) | |||
throw new ObjectWritingException("Can't write " + file); | |||
} | |||
}.writePackedRefs(); | |||
} | |||
private Map<String, Ref> computeNewRefs() throws IOException { | |||
final RevWalk rw = new RevWalk(db); | |||
final Map<String, Ref> refs = new HashMap<String, Ref>(); | |||
final BufferedReader br = new BufferedReader(new InputStreamReader( | |||
new FileInputStream(refList), Constants.CHARSET)); | |||
try { | |||
String line; | |||
while ((line = br.readLine()) != null) { | |||
final String[] parts = line.split("[ \t]{1,}"); | |||
final ObjectId origId = ObjectId.fromString(parts[0]); | |||
final String type = parts[1]; | |||
final String name = parts[2]; | |||
ObjectId id = rewrites.get(origId); | |||
if (id == null) | |||
id = origId; | |||
try { | |||
rw.parseAny(id); | |||
} catch (MissingObjectException mue) { | |||
if (!Constants.TYPE_COMMIT.equals(type)) { | |||
System.err.println("skipping " + type + " " + name); | |||
continue; | |||
} | |||
throw new MissingObjectException(id, type); | |||
} | |||
refs.put(name, new Ref(Ref.Storage.PACKED, name, id)); | |||
} | |||
} finally { | |||
br.close(); | |||
} | |||
return refs; | |||
} | |||
} |
@@ -0,0 +1,76 @@ | |||
/* | |||
* Copyright (C) 2008, Google Inc. | |||
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm.debug; | |||
import org.eclipse.jgit.dircache.DirCache; | |||
import org.eclipse.jgit.dircache.DirCacheTree; | |||
import org.eclipse.jgit.pgm.TextBuiltin; | |||
class ShowCacheTree extends TextBuiltin { | |||
@Override | |||
protected void run() throws Exception { | |||
final DirCache cache = DirCache.read(db); | |||
final DirCacheTree tree = cache.getCacheTree(false); | |||
if (tree == null) | |||
throw die("no 'TREE' section in index"); | |||
show(tree); | |||
} | |||
private void show(final DirCacheTree tree) { | |||
out.print("\""); | |||
out.print(tree.getPathString()); | |||
out.print("\""); | |||
out.print(": "); | |||
out.print(tree.getEntrySpan()); | |||
out.print(" entries"); | |||
out.print(", "); | |||
out.print(tree.getChildCount()); | |||
out.print(" children"); | |||
out.println(); | |||
for (int i = 0; i < tree.getChildCount(); i++) | |||
show(tree.getChild(i)); | |||
} | |||
} |
@@ -0,0 +1,121 @@ | |||
/* | |||
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm.debug; | |||
import java.net.URL; | |||
import org.kohsuke.args4j.Option; | |||
import org.eclipse.jgit.pgm.Command; | |||
import org.eclipse.jgit.pgm.CommandCatalog; | |||
import org.eclipse.jgit.pgm.CommandRef; | |||
import org.eclipse.jgit.pgm.TextBuiltin; | |||
@Command(usage = "Display a list of all registered jgit commands") | |||
class ShowCommands extends TextBuiltin { | |||
@Option(name = "--pretty", usage = "alter the detail shown") | |||
private Format pretty = Format.USAGE; | |||
@Override | |||
protected void run() throws Exception { | |||
final CommandRef[] list = CommandCatalog.all(); | |||
int width = 0; | |||
for (final CommandRef c : list) | |||
width = Math.max(width, c.getName().length()); | |||
width += 2; | |||
for (final CommandRef c : list) { | |||
System.err.print(c.isCommon() ? '*' : ' '); | |||
System.err.print(' '); | |||
System.err.print(c.getName()); | |||
for (int i = c.getName().length(); i < width; i++) | |||
System.err.print(' '); | |||
pretty.print(c); | |||
System.err.println(); | |||
} | |||
System.err.println(); | |||
} | |||
static enum Format { | |||
/** */ | |||
USAGE { | |||
void print(final CommandRef c) { | |||
System.err.print(c.getUsage()); | |||
} | |||
}, | |||
/** */ | |||
CLASSES { | |||
void print(final CommandRef c) { | |||
System.err.print(c.getImplementationClassName()); | |||
} | |||
}, | |||
/** */ | |||
URLS { | |||
void print(final CommandRef c) { | |||
final ClassLoader ldr = c.getImplementationClassLoader(); | |||
String cn = c.getImplementationClassName(); | |||
cn = cn.replace('.', '/') + ".class"; | |||
final URL url = ldr.getResource(cn); | |||
if (url == null) { | |||
System.err.print("!! NOT FOUND !!"); | |||
return; | |||
} | |||
String rn = url.toExternalForm(); | |||
if (rn.endsWith(cn)) | |||
rn = rn.substring(0, rn.length() - cn.length()); | |||
System.err.print(rn); | |||
} | |||
}; | |||
abstract void print(CommandRef c); | |||
} | |||
} |
@@ -0,0 +1,80 @@ | |||
/* | |||
* Copyright (C) 2008, Google Inc. | |||
* Copyright (C) 2008, Jonas Fonseca <fonseca@diku.dk> | |||
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm.debug; | |||
import java.text.SimpleDateFormat; | |||
import java.util.Date; | |||
import org.eclipse.jgit.dircache.DirCache; | |||
import org.eclipse.jgit.dircache.DirCacheEntry; | |||
import org.eclipse.jgit.lib.FileMode; | |||
import org.eclipse.jgit.pgm.TextBuiltin; | |||
class ShowDirCache extends TextBuiltin { | |||
@Override | |||
protected void run() throws Exception { | |||
final SimpleDateFormat fmt; | |||
fmt = new SimpleDateFormat("yyyyMMdd,HHmmss.SSS"); | |||
final DirCache cache = DirCache.read(db); | |||
for (int i = 0; i < cache.getEntryCount(); i++) { | |||
final DirCacheEntry ent = cache.getEntry(i); | |||
final FileMode mode = FileMode.fromBits(ent.getRawMode()); | |||
final int len = ent.getLength(); | |||
final Date mtime = new Date(ent.getLastModified()); | |||
out.print(mode); | |||
out.format(" %6d", len); | |||
out.print(' '); | |||
out.print(fmt.format(mtime)); | |||
out.print(' '); | |||
out.print(ent.getObjectId().name()); | |||
out.print('\t'); | |||
out.print(ent.getPathString()); | |||
out.println(); | |||
} | |||
} | |||
} |
@@ -0,0 +1,61 @@ | |||
/* | |||
* Copyright (C) 2008, Google Inc. | |||
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm.debug; | |||
import org.eclipse.jgit.dircache.DirCache; | |||
import org.eclipse.jgit.pgm.TextBuiltin; | |||
class WriteDirCache extends TextBuiltin { | |||
@Override | |||
protected void run() throws Exception { | |||
final DirCache cache = DirCache.read(db); | |||
if (!cache.lock()) | |||
throw die("failed to lock index"); | |||
cache.read(); | |||
cache.write(); | |||
if (!cache.commit()) | |||
throw die("failed to commit index"); | |||
} | |||
} |
@@ -0,0 +1,143 @@ | |||
/* | |||
* Copyright (C) 2008-2009, Google Inc. | |||
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm.opt; | |||
import java.io.File; | |||
import java.io.IOException; | |||
import org.kohsuke.args4j.CmdLineException; | |||
import org.kohsuke.args4j.CmdLineParser; | |||
import org.kohsuke.args4j.OptionDef; | |||
import org.kohsuke.args4j.spi.OptionHandler; | |||
import org.kohsuke.args4j.spi.Parameters; | |||
import org.kohsuke.args4j.spi.Setter; | |||
import org.eclipse.jgit.dircache.DirCache; | |||
import org.eclipse.jgit.dircache.DirCacheIterator; | |||
import org.eclipse.jgit.errors.IncorrectObjectTypeException; | |||
import org.eclipse.jgit.errors.MissingObjectException; | |||
import org.eclipse.jgit.lib.ObjectId; | |||
import org.eclipse.jgit.lib.WindowCursor; | |||
import org.eclipse.jgit.treewalk.AbstractTreeIterator; | |||
import org.eclipse.jgit.treewalk.CanonicalTreeParser; | |||
import org.eclipse.jgit.treewalk.FileTreeIterator; | |||
/** | |||
* Custom argument handler {@link AbstractTreeIterator} from string values. | |||
* <p> | |||
* Assumes the parser has been initialized with a Repository. | |||
*/ | |||
public class AbstractTreeIteratorHandler extends | |||
OptionHandler<AbstractTreeIterator> { | |||
private final org.eclipse.jgit.pgm.opt.CmdLineParser clp; | |||
/** | |||
* Create a new handler for the command name. | |||
* <p> | |||
* This constructor is used only by args4j. | |||
* | |||
* @param parser | |||
* @param option | |||
* @param setter | |||
*/ | |||
public AbstractTreeIteratorHandler(final CmdLineParser parser, | |||
final OptionDef option, | |||
final Setter<? super AbstractTreeIterator> setter) { | |||
super(parser, option, setter); | |||
clp = (org.eclipse.jgit.pgm.opt.CmdLineParser) parser; | |||
} | |||
@Override | |||
public int parseArguments(final Parameters params) throws CmdLineException { | |||
final String name = params.getParameter(0); | |||
if (new File(name).isDirectory()) { | |||
setter.addValue(new FileTreeIterator(new File(name))); | |||
return 1; | |||
} | |||
if (new File(name).isFile()) { | |||
final DirCache dirc; | |||
try { | |||
dirc = DirCache.read(new File(name)); | |||
} catch (IOException e) { | |||
throw new CmdLineException(name + " is not an index file", e); | |||
} | |||
setter.addValue(new DirCacheIterator(dirc)); | |||
return 1; | |||
} | |||
final ObjectId id; | |||
try { | |||
id = clp.getRepository().resolve(name); | |||
} catch (IOException e) { | |||
throw new CmdLineException(e.getMessage()); | |||
} | |||
if (id == null) | |||
throw new CmdLineException(name + " is not a tree"); | |||
final CanonicalTreeParser p = new CanonicalTreeParser(); | |||
final WindowCursor curs = new WindowCursor(); | |||
try { | |||
p.reset(clp.getRepository(), clp.getRevWalk().parseTree(id), curs); | |||
} catch (MissingObjectException e) { | |||
throw new CmdLineException(name + " is not a tree"); | |||
} catch (IncorrectObjectTypeException e) { | |||
throw new CmdLineException(name + " is not a tree"); | |||
} catch (IOException e) { | |||
throw new CmdLineException("cannot read " + name + ": " | |||
+ e.getMessage()); | |||
} finally { | |||
curs.release(); | |||
} | |||
setter.addValue(p); | |||
return 1; | |||
} | |||
@Override | |||
public String getDefaultMetaVariable() { | |||
return "tree-ish"; | |||
} | |||
} |
@@ -0,0 +1,177 @@ | |||
/* | |||
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm.opt; | |||
import java.util.ArrayList; | |||
import org.kohsuke.args4j.Argument; | |||
import org.kohsuke.args4j.CmdLineException; | |||
import org.kohsuke.args4j.IllegalAnnotationError; | |||
import org.kohsuke.args4j.Option; | |||
import org.eclipse.jgit.lib.ObjectId; | |||
import org.eclipse.jgit.lib.Repository; | |||
import org.eclipse.jgit.pgm.TextBuiltin; | |||
import org.eclipse.jgit.revwalk.RevCommit; | |||
import org.eclipse.jgit.revwalk.RevTree; | |||
import org.eclipse.jgit.revwalk.RevWalk; | |||
import org.eclipse.jgit.transport.RefSpec; | |||
import org.eclipse.jgit.treewalk.AbstractTreeIterator; | |||
/** | |||
* Extended command line parser which handles --foo=value arguments. | |||
* <p> | |||
* The args4j package does not natively handle --foo=value and instead prefers | |||
* to see --foo value on the command line. Many users are used to the GNU style | |||
* --foo=value long option, so we convert from the GNU style format to the | |||
* args4j style format prior to invoking args4j for parsing. | |||
*/ | |||
public class CmdLineParser extends org.kohsuke.args4j.CmdLineParser { | |||
static { | |||
registerHandler(AbstractTreeIterator.class, | |||
AbstractTreeIteratorHandler.class); | |||
registerHandler(ObjectId.class, ObjectIdHandler.class); | |||
registerHandler(RefSpec.class, RefSpecHandler.class); | |||
registerHandler(RevCommit.class, RevCommitHandler.class); | |||
registerHandler(RevTree.class, RevTreeHandler.class); | |||
} | |||
private final Repository db; | |||
private RevWalk walk; | |||
/** | |||
* Creates a new command line owner that parses arguments/options and set | |||
* them into the given object. | |||
* | |||
* @param bean | |||
* instance of a class annotated by {@link Option} and | |||
* {@link Argument}. this object will receive values. | |||
* | |||
* @throws IllegalAnnotationError | |||
* if the option bean class is using args4j annotations | |||
* incorrectly. | |||
*/ | |||
public CmdLineParser(final Object bean) { | |||
this(bean, null); | |||
} | |||
/** | |||
* Creates a new command line owner that parses arguments/options and set | |||
* them into the given object. | |||
* | |||
* @param bean | |||
* instance of a class annotated by {@link Option} and | |||
* {@link Argument}. this object will receive values. | |||
* @param repo | |||
* repository this parser can translate options through. | |||
* @throws IllegalAnnotationError | |||
* if the option bean class is using args4j annotations | |||
* incorrectly. | |||
*/ | |||
public CmdLineParser(final Object bean, Repository repo) { | |||
super(bean); | |||
if (repo == null && bean instanceof TextBuiltin) | |||
repo = ((TextBuiltin) bean).getRepository(); | |||
this.db = repo; | |||
} | |||
@Override | |||
public void parseArgument(final String... args) throws CmdLineException { | |||
final ArrayList<String> tmp = new ArrayList<String>(args.length); | |||
for (int argi = 0; argi < args.length; argi++) { | |||
final String str = args[argi]; | |||
if (str.equals("--")) { | |||
while (argi < args.length) | |||
tmp.add(args[argi++]); | |||
break; | |||
} | |||
if (str.startsWith("--")) { | |||
final int eq = str.indexOf('='); | |||
if (eq > 0) { | |||
tmp.add(str.substring(0, eq)); | |||
tmp.add(str.substring(eq + 1)); | |||
continue; | |||
} | |||
} | |||
tmp.add(str); | |||
} | |||
super.parseArgument(tmp.toArray(new String[tmp.size()])); | |||
} | |||
/** | |||
* Get the repository this parser translates values through. | |||
* | |||
* @return the repository, if specified during construction. | |||
*/ | |||
public Repository getRepository() { | |||
if (db == null) | |||
throw new IllegalStateException("No Git repository configured."); | |||
return db; | |||
} | |||
/** | |||
* Get the revision walker used to support option parsing. | |||
* | |||
* @return the revision walk used by this option parser. | |||
*/ | |||
public RevWalk getRevWalk() { | |||
if (walk == null) | |||
walk = new RevWalk(getRepository()); | |||
return walk; | |||
} | |||
/** | |||
* Get the revision walker used to support option parsing. | |||
* <p> | |||
* This method does not initialize the RevWalk and may return null. | |||
* | |||
* @return the revision walk used by this option parser, or null. | |||
*/ | |||
public RevWalk getRevWalkGently() { | |||
return walk; | |||
} | |||
} |
@@ -0,0 +1,101 @@ | |||
/* | |||
* Copyright (C) 2009, Google Inc. | |||
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm.opt; | |||
import java.io.IOException; | |||
import org.kohsuke.args4j.CmdLineException; | |||
import org.kohsuke.args4j.CmdLineParser; | |||
import org.kohsuke.args4j.OptionDef; | |||
import org.kohsuke.args4j.spi.OptionHandler; | |||
import org.kohsuke.args4j.spi.Parameters; | |||
import org.kohsuke.args4j.spi.Setter; | |||
import org.eclipse.jgit.lib.ObjectId; | |||
/** | |||
* Custom argument handler {@link ObjectId} from string values. | |||
* <p> | |||
* Assumes the parser has been initialized with a Repository. | |||
*/ | |||
public class ObjectIdHandler extends OptionHandler<ObjectId> { | |||
private final org.eclipse.jgit.pgm.opt.CmdLineParser clp; | |||
/** | |||
* Create a new handler for the command name. | |||
* <p> | |||
* This constructor is used only by args4j. | |||
* | |||
* @param parser | |||
* @param option | |||
* @param setter | |||
*/ | |||
public ObjectIdHandler(final CmdLineParser parser, final OptionDef option, | |||
final Setter<? super ObjectId> setter) { | |||
super(parser, option, setter); | |||
clp = (org.eclipse.jgit.pgm.opt.CmdLineParser) parser; | |||
} | |||
@Override | |||
public int parseArguments(final Parameters params) throws CmdLineException { | |||
final String name = params.getParameter(0); | |||
final ObjectId id; | |||
try { | |||
id = clp.getRepository().resolve(name); | |||
} catch (IOException e) { | |||
throw new CmdLineException(e.getMessage()); | |||
} | |||
if (id != null) { | |||
setter.addValue(id); | |||
return 1; | |||
} | |||
throw new CmdLineException(name + " is not an object"); | |||
} | |||
@Override | |||
public String getDefaultMetaVariable() { | |||
return "object"; | |||
} | |||
} |
@@ -0,0 +1,108 @@ | |||
/* | |||
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm.opt; | |||
import java.util.ArrayList; | |||
import java.util.List; | |||
import org.kohsuke.args4j.CmdLineException; | |||
import org.kohsuke.args4j.CmdLineParser; | |||
import org.kohsuke.args4j.Option; | |||
import org.kohsuke.args4j.OptionDef; | |||
import org.kohsuke.args4j.spi.OptionHandler; | |||
import org.kohsuke.args4j.spi.Parameters; | |||
import org.kohsuke.args4j.spi.Setter; | |||
import org.eclipse.jgit.treewalk.filter.PathFilter; | |||
import org.eclipse.jgit.treewalk.filter.PathFilterGroup; | |||
import org.eclipse.jgit.treewalk.filter.TreeFilter; | |||
/** | |||
* Create a {@link TreeFilter} to patch math names. | |||
* <p> | |||
* This handler consumes all arguments to the end of the command line, and is | |||
* meant to be used on an {@link Option} of name "--". | |||
*/ | |||
public class PathTreeFilterHandler extends OptionHandler<TreeFilter> { | |||
/** | |||
* Create a new handler for the command name. | |||
* <p> | |||
* This constructor is used only by args4j. | |||
* | |||
* @param parser | |||
* @param option | |||
* @param setter | |||
*/ | |||
public PathTreeFilterHandler(final CmdLineParser parser, | |||
final OptionDef option, final Setter<? super TreeFilter> setter) { | |||
super(parser, option, setter); | |||
} | |||
@Override | |||
public int parseArguments(final Parameters params) throws CmdLineException { | |||
final List<PathFilter> filters = new ArrayList<PathFilter>(); | |||
for (int idx = 0;; idx++) { | |||
final String path; | |||
try { | |||
path = params.getParameter(idx); | |||
} catch (CmdLineException cle) { | |||
break; | |||
} | |||
filters.add(PathFilter.create(path)); | |||
} | |||
if (filters.size() == 0) | |||
return 0; | |||
if (filters.size() == 1) { | |||
setter.addValue(filters.get(0)); | |||
return 1; | |||
} | |||
setter.addValue(PathFilterGroup.create(filters)); | |||
return filters.size(); | |||
} | |||
@Override | |||
public String getDefaultMetaVariable() { | |||
return "path ..."; | |||
} | |||
} |
@@ -0,0 +1,84 @@ | |||
/* | |||
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm.opt; | |||
import org.kohsuke.args4j.CmdLineException; | |||
import org.kohsuke.args4j.CmdLineParser; | |||
import org.kohsuke.args4j.OptionDef; | |||
import org.kohsuke.args4j.spi.OptionHandler; | |||
import org.kohsuke.args4j.spi.Parameters; | |||
import org.kohsuke.args4j.spi.Setter; | |||
import org.eclipse.jgit.transport.RefSpec; | |||
/** | |||
* Custom argument handler {@link RefSpec} from string values. | |||
* <p> | |||
* Assumes the parser has been initialized with a Repository. | |||
*/ | |||
public class RefSpecHandler extends OptionHandler<RefSpec> { | |||
/** | |||
* Create a new handler for the command name. | |||
* <p> | |||
* This constructor is used only by args4j. | |||
* | |||
* @param parser | |||
* @param option | |||
* @param setter | |||
*/ | |||
public RefSpecHandler(final CmdLineParser parser, final OptionDef option, | |||
final Setter<? super RefSpec> setter) { | |||
super(parser, option, setter); | |||
} | |||
@Override | |||
public int parseArguments(final Parameters params) throws CmdLineException { | |||
setter.addValue(new RefSpec(params.getParameter(0))); | |||
return 1; | |||
} | |||
@Override | |||
public String getDefaultMetaVariable() { | |||
return "refspec"; | |||
} | |||
} |
@@ -0,0 +1,146 @@ | |||
/* | |||
* Copyright (C) 2009, Google Inc. | |||
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm.opt; | |||
import java.io.IOException; | |||
import org.kohsuke.args4j.CmdLineException; | |||
import org.kohsuke.args4j.CmdLineParser; | |||
import org.kohsuke.args4j.OptionDef; | |||
import org.kohsuke.args4j.spi.OptionHandler; | |||
import org.kohsuke.args4j.spi.Parameters; | |||
import org.kohsuke.args4j.spi.Setter; | |||
import org.eclipse.jgit.errors.IncorrectObjectTypeException; | |||
import org.eclipse.jgit.errors.MissingObjectException; | |||
import org.eclipse.jgit.lib.ObjectId; | |||
import org.eclipse.jgit.revwalk.RevCommit; | |||
import org.eclipse.jgit.revwalk.RevFlag; | |||
/** | |||
* Custom argument handler {@link RevCommit} from string values. | |||
* <p> | |||
* Assumes the parser has been initialized with a Repository. | |||
*/ | |||
public class RevCommitHandler extends OptionHandler<RevCommit> { | |||
private final org.eclipse.jgit.pgm.opt.CmdLineParser clp; | |||
/** | |||
* Create a new handler for the command name. | |||
* <p> | |||
* This constructor is used only by args4j. | |||
* | |||
* @param parser | |||
* @param option | |||
* @param setter | |||
*/ | |||
public RevCommitHandler(final CmdLineParser parser, final OptionDef option, | |||
final Setter<? super RevCommit> setter) { | |||
super(parser, option, setter); | |||
clp = (org.eclipse.jgit.pgm.opt.CmdLineParser) parser; | |||
} | |||
@Override | |||
public int parseArguments(final Parameters params) throws CmdLineException { | |||
String name = params.getParameter(0); | |||
boolean interesting = true; | |||
if (name.startsWith("^")) { | |||
name = name.substring(1); | |||
interesting = false; | |||
} | |||
final int dot2 = name.indexOf(".."); | |||
if (dot2 != -1) { | |||
if (!option.isMultiValued()) | |||
throw new CmdLineException("Only one " + option.metaVar() | |||
+ " expected in " + name + "." + ""); | |||
final String left = name.substring(0, dot2); | |||
final String right = name.substring(dot2 + 2); | |||
addOne(left, false); | |||
addOne(right, true); | |||
return 1; | |||
} | |||
addOne(name, interesting); | |||
return 1; | |||
} | |||
private void addOne(final String name, final boolean interesting) | |||
throws CmdLineException { | |||
final ObjectId id; | |||
try { | |||
id = clp.getRepository().resolve(name); | |||
} catch (IOException e) { | |||
throw new CmdLineException(e.getMessage()); | |||
} | |||
if (id == null) | |||
throw new CmdLineException(name + " is not a commit"); | |||
final RevCommit c; | |||
try { | |||
c = clp.getRevWalk().parseCommit(id); | |||
} catch (MissingObjectException e) { | |||
throw new CmdLineException(name + " is not a commit"); | |||
} catch (IncorrectObjectTypeException e) { | |||
throw new CmdLineException(name + " is not a commit"); | |||
} catch (IOException e) { | |||
throw new CmdLineException("cannot read " + name + ": " | |||
+ e.getMessage()); | |||
} | |||
if (interesting) | |||
c.remove(RevFlag.UNINTERESTING); | |||
else | |||
c.add(RevFlag.UNINTERESTING); | |||
setter.addValue(c); | |||
} | |||
@Override | |||
public String getDefaultMetaVariable() { | |||
return "commit-ish"; | |||
} | |||
} |
@@ -0,0 +1,114 @@ | |||
/* | |||
* Copyright (C) 2009, Google Inc. | |||
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm.opt; | |||
import java.io.IOException; | |||
import org.kohsuke.args4j.CmdLineException; | |||
import org.kohsuke.args4j.CmdLineParser; | |||
import org.kohsuke.args4j.OptionDef; | |||
import org.kohsuke.args4j.spi.OptionHandler; | |||
import org.kohsuke.args4j.spi.Parameters; | |||
import org.kohsuke.args4j.spi.Setter; | |||
import org.eclipse.jgit.errors.IncorrectObjectTypeException; | |||
import org.eclipse.jgit.errors.MissingObjectException; | |||
import org.eclipse.jgit.lib.ObjectId; | |||
import org.eclipse.jgit.revwalk.RevTree; | |||
/** | |||
* Custom argument handler {@link RevTree} from string values. | |||
* <p> | |||
* Assumes the parser has been initialized with a Repository. | |||
*/ | |||
public class RevTreeHandler extends OptionHandler<RevTree> { | |||
private final org.eclipse.jgit.pgm.opt.CmdLineParser clp; | |||
/** | |||
* Create a new handler for the command name. | |||
* <p> | |||
* This constructor is used only by args4j. | |||
* | |||
* @param parser | |||
* @param option | |||
* @param setter | |||
*/ | |||
public RevTreeHandler(final CmdLineParser parser, final OptionDef option, | |||
final Setter<? super RevTree> setter) { | |||
super(parser, option, setter); | |||
clp = (org.eclipse.jgit.pgm.opt.CmdLineParser) parser; | |||
} | |||
@Override | |||
public int parseArguments(final Parameters params) throws CmdLineException { | |||
final String name = params.getParameter(0); | |||
final ObjectId id; | |||
try { | |||
id = clp.getRepository().resolve(name); | |||
} catch (IOException e) { | |||
throw new CmdLineException(e.getMessage()); | |||
} | |||
if (id == null) | |||
throw new CmdLineException(name + " is not a tree"); | |||
final RevTree c; | |||
try { | |||
c = clp.getRevWalk().parseTree(id); | |||
} catch (MissingObjectException e) { | |||
throw new CmdLineException(name + " is not a tree"); | |||
} catch (IncorrectObjectTypeException e) { | |||
throw new CmdLineException(name + " is not a tree"); | |||
} catch (IOException e) { | |||
throw new CmdLineException("cannot read " + name + ": " | |||
+ e.getMessage()); | |||
} | |||
setter.addValue(c); | |||
return 1; | |||
} | |||
@Override | |||
public String getDefaultMetaVariable() { | |||
return "tree-ish"; | |||
} | |||
} |
@@ -0,0 +1,100 @@ | |||
/* | |||
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.pgm.opt; | |||
import java.text.MessageFormat; | |||
import org.kohsuke.args4j.CmdLineException; | |||
import org.kohsuke.args4j.CmdLineParser; | |||
import org.kohsuke.args4j.OptionDef; | |||
import org.kohsuke.args4j.spi.OptionHandler; | |||
import org.kohsuke.args4j.spi.Parameters; | |||
import org.kohsuke.args4j.spi.Setter; | |||
import org.eclipse.jgit.pgm.CommandCatalog; | |||
import org.eclipse.jgit.pgm.CommandRef; | |||
import org.eclipse.jgit.pgm.TextBuiltin; | |||
/** | |||
* Custom Argument handler for jgit command selection. | |||
* <p> | |||
* Translates a single argument string to a {@link TextBuiltin} instance which | |||
* we can execute at runtime with the remaining arguments of the parser. | |||
*/ | |||
public class SubcommandHandler extends OptionHandler<TextBuiltin> { | |||
/** | |||
* Create a new handler for the command name. | |||
* <p> | |||
* This constructor is used only by args4j. | |||
* | |||
* @param parser | |||
* @param option | |||
* @param setter | |||
*/ | |||
public SubcommandHandler(final CmdLineParser parser, | |||
final OptionDef option, final Setter<? super TextBuiltin> setter) { | |||
super(parser, option, setter); | |||
} | |||
@Override | |||
public int parseArguments(final Parameters params) throws CmdLineException { | |||
final String name = params.getParameter(0); | |||
final CommandRef cr = CommandCatalog.get(name); | |||
if (cr == null) | |||
throw new CmdLineException(MessageFormat.format( | |||
"{0} is not a jgit command", name)); | |||
// Force option parsing to stop. Everything after us should | |||
// be arguments known only to this command and must not be | |||
// recognized by the current parser. | |||
// | |||
owner.stopOptionParsing(); | |||
setter.addValue(cr.create()); | |||
return 1; | |||
} | |||
@Override | |||
public String getDefaultMetaVariable() { | |||
return "command"; | |||
} | |||
} |
@@ -0,0 +1,11 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<classpath> | |||
<classpathentry excluding="**/*.idx|**/*.pack" kind="src" path="tst"/> | |||
<classpathentry kind="src" path="tst-rsrc"/> | |||
<classpathentry kind="src" path="exttst"/> | |||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/> | |||
<classpathentry combineaccessrules="false" kind="src" path="/org.eclipse.jgit"/> | |||
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/3.8.1"/> | |||
<classpathentry kind="lib" path="/org.eclipse.jgit/lib/jsch-0.1.37.jar" sourcepath="/org.eclipse.jgit/lib/jsch-0.1.37.zip"/> | |||
<classpathentry kind="output" path="bin"/> | |||
</classpath> |
@@ -0,0 +1,3 @@ | |||
bin | |||
tst/todopack | |||
trash |
@@ -0,0 +1,17 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<projectDescription> | |||
<name>org.eclipse.jgit.test</name> | |||
<comment></comment> | |||
<projects> | |||
</projects> | |||
<buildSpec> | |||
<buildCommand> | |||
<name>org.eclipse.jdt.core.javabuilder</name> | |||
<arguments> | |||
</arguments> | |||
</buildCommand> | |||
</buildSpec> | |||
<natures> | |||
<nature>org.eclipse.jdt.core.javanature</nature> | |||
</natures> | |||
</projectDescription> |
@@ -0,0 +1,6 @@ | |||
#Sat Dec 20 21:21:24 CET 2008 | |||
eclipse.preferences.version=1 | |||
encoding//tst-rsrc/org/eclipse/jgit/patch/testGetText_BothISO88591.patch=ISO-8859-1 | |||
encoding//tst-rsrc/org/eclipse/jgit/patch/testGetText_Convert.patch=ISO-8859-1 | |||
encoding//tst-rsrc/org/eclipse/jgit/patch/testGetText_DiffCc.patch=ISO-8859-1 | |||
encoding/<project>=UTF-8 |
@@ -0,0 +1,3 @@ | |||
#Mon Mar 24 18:55:56 EDT 2008 | |||
eclipse.preferences.version=1 | |||
line.separator=\n |
@@ -0,0 +1,320 @@ | |||
#Tue Feb 05 00:01:29 CET 2008 | |||
eclipse.preferences.version=1 | |||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled | |||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 | |||
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve | |||
org.eclipse.jdt.core.compiler.compliance=1.5 | |||
org.eclipse.jdt.core.compiler.debug.lineNumber=generate | |||
org.eclipse.jdt.core.compiler.debug.localVariable=generate | |||
org.eclipse.jdt.core.compiler.debug.sourceFile=generate | |||
org.eclipse.jdt.core.compiler.doc.comment.support=enabled | |||
org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning | |||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error | |||
org.eclipse.jdt.core.compiler.problem.autoboxing=warning | |||
org.eclipse.jdt.core.compiler.problem.deprecation=warning | |||
org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled | |||
org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled | |||
org.eclipse.jdt.core.compiler.problem.discouragedReference=warning | |||
org.eclipse.jdt.core.compiler.problem.emptyStatement=warning | |||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error | |||
org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning | |||
org.eclipse.jdt.core.compiler.problem.fieldHiding=warning | |||
org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning | |||
org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error | |||
org.eclipse.jdt.core.compiler.problem.forbiddenReference=error | |||
org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=error | |||
org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning | |||
org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning | |||
org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=error | |||
org.eclipse.jdt.core.compiler.problem.invalidJavadoc=error | |||
org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled | |||
org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled | |||
org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled | |||
org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private | |||
org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning | |||
org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error | |||
org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore | |||
org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore | |||
org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled | |||
org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=public | |||
org.eclipse.jdt.core.compiler.problem.missingJavadocTags=error | |||
org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled | |||
org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=private | |||
org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore | |||
org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning | |||
org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error | |||
org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=error | |||
org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore | |||
org.eclipse.jdt.core.compiler.problem.nullReference=warning | |||
org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning | |||
org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore | |||
org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error | |||
org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning | |||
org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore | |||
org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning | |||
org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled | |||
org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error | |||
org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled | |||
org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning | |||
org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning | |||
org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning | |||
org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning | |||
org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error | |||
org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore | |||
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=error | |||
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled | |||
org.eclipse.jdt.core.compiler.problem.unusedImport=error | |||
org.eclipse.jdt.core.compiler.problem.unusedLabel=error | |||
org.eclipse.jdt.core.compiler.problem.unusedLocal=error | |||
org.eclipse.jdt.core.compiler.problem.unusedParameter=warning | |||
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled | |||
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled | |||
org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error | |||
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=error | |||
org.eclipse.jdt.core.compiler.source=1.5 | |||
org.eclipse.jdt.core.formatter.align_type_members_on_columns=false | |||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 | |||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 | |||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 | |||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 | |||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 | |||
org.eclipse.jdt.core.formatter.alignment_for_assignment=0 | |||
org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 | |||
org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 | |||
org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 | |||
org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0 | |||
org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 | |||
org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 | |||
org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 | |||
org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 | |||
org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 | |||
org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 | |||
org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 | |||
org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 | |||
org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 | |||
org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 | |||
org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 | |||
org.eclipse.jdt.core.formatter.blank_lines_after_package=1 | |||
org.eclipse.jdt.core.formatter.blank_lines_before_field=1 | |||
org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 | |||
org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 | |||
org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 | |||
org.eclipse.jdt.core.formatter.blank_lines_before_method=1 | |||
org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 | |||
org.eclipse.jdt.core.formatter.blank_lines_before_package=0 | |||
org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 | |||
org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line | |||
org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line | |||
org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line | |||
org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line | |||
org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line | |||
org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line | |||
org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line | |||
org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line | |||
org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line | |||
org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line | |||
org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line | |||
org.eclipse.jdt.core.formatter.comment.clear_blank_lines=false | |||
org.eclipse.jdt.core.formatter.comment.format_comments=true | |||
org.eclipse.jdt.core.formatter.comment.format_header=false | |||
org.eclipse.jdt.core.formatter.comment.format_html=true | |||
org.eclipse.jdt.core.formatter.comment.format_source_code=true | |||
org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true | |||
org.eclipse.jdt.core.formatter.comment.indent_root_tags=true | |||
org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert | |||
org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert | |||
org.eclipse.jdt.core.formatter.comment.line_length=80 | |||
org.eclipse.jdt.core.formatter.compact_else_if=true | |||
org.eclipse.jdt.core.formatter.continuation_indentation=2 | |||
org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 | |||
org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false | |||
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true | |||
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true | |||
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true | |||
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true | |||
org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true | |||
org.eclipse.jdt.core.formatter.indent_empty_lines=false | |||
org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true | |||
org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true | |||
org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true | |||
org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false | |||
org.eclipse.jdt.core.formatter.indentation.size=4 | |||
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert | |||
org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert | |||
org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert | |||
org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert | |||
org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert | |||
org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert | |||
org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert | |||
org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert | |||
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert | |||
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert | |||
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert | |||
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert | |||
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert | |||
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert | |||
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert | |||
org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert | |||
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert | |||
org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false | |||
org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false | |||
org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false | |||
org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false | |||
org.eclipse.jdt.core.formatter.lineSplit=80 | |||
org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 | |||
org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 | |||
org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true | |||
org.eclipse.jdt.core.formatter.tabulation.char=tab | |||
org.eclipse.jdt.core.formatter.tabulation.size=4 | |||
org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false |
@@ -0,0 +1,10 @@ | |||
#Thu Dec 20 01:31:04 CET 2007 | |||
eclipse.preferences.version=1 | |||
formatter_profile=_JGit | |||
formatter_settings_version=10 | |||
internal.default.compliance=default | |||
org.eclipse.jdt.ui.ignorelowercasenames=true | |||
org.eclipse.jdt.ui.importorder=java;javax;org;com; | |||
org.eclipse.jdt.ui.ondemandthreshold=99 | |||
org.eclipse.jdt.ui.staticondemandthreshold=99 | |||
org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?><templates/> |
@@ -0,0 +1,116 @@ | |||
/* | |||
* Copyright (C) 2008, Google Inc. | |||
* Copyright (C) 2007-2008, Robin Rosenberg <robin.rosenberg@dewire.com> | |||
* Copyright (C) 2007, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.lib; | |||
import java.io.BufferedReader; | |||
import java.io.File; | |||
import java.io.FileReader; | |||
import java.io.IOException; | |||
import java.io.InputStream; | |||
import junit.framework.TestCase; | |||
/** | |||
* Base class for performance unit test. | |||
*/ | |||
public abstract class SpeedTestBase extends TestCase { | |||
/** | |||
* The time used by native git as this is our reference. | |||
*/ | |||
protected long nativeTime; | |||
/** | |||
* Reference to the location of the Linux kernel repo. | |||
*/ | |||
protected String kernelrepo; | |||
/** | |||
* Prepare test by running a test against the Linux kernel repo first. | |||
* | |||
* @param refcmd | |||
* git command to execute | |||
* | |||
* @throws Exception | |||
*/ | |||
protected void prepare(String[] refcmd) throws Exception { | |||
try { | |||
BufferedReader bufferedReader = new BufferedReader(new FileReader("kernel.ref")); | |||
try { | |||
kernelrepo = bufferedReader.readLine(); | |||
} finally { | |||
bufferedReader.close(); | |||
} | |||
timeNativeGit(kernelrepo, refcmd); | |||
nativeTime = timeNativeGit(kernelrepo, refcmd); | |||
} catch (Exception e) { | |||
System.out.println("Create a file named kernel.ref and put the path to the Linux kernels repository there"); | |||
throw e; | |||
} | |||
} | |||
private static long timeNativeGit(String kernelrepo, String[] refcmd) throws IOException, | |||
InterruptedException, Exception { | |||
long start = System.currentTimeMillis(); | |||
Process p = Runtime.getRuntime().exec(refcmd, null, new File(kernelrepo,"..")); | |||
InputStream inputStream = p.getInputStream(); | |||
InputStream errorStream = p.getErrorStream(); | |||
byte[] buf=new byte[1024*1024]; | |||
for (;;) | |||
if (inputStream.read(buf) < 0) | |||
break; | |||
if (p.waitFor()!=0) { | |||
int c; | |||
while ((c=errorStream.read())!=-1) | |||
System.err.print((char)c); | |||
throw new Exception("git log failed"); | |||
} | |||
inputStream.close(); | |||
errorStream.close(); | |||
long stop = System.currentTimeMillis(); | |||
return stop - start; | |||
} | |||
} |
@@ -0,0 +1,91 @@ | |||
/* | |||
* Copyright (C) 2007-2008, Robin Rosenberg <robin.rosenberg@dewire.com> | |||
* Copyright (C) 2007, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.lib; | |||
import java.io.File; | |||
import java.io.IOException; | |||
import junit.textui.TestRunner; | |||
public class T0005_ShallowSpeedTest extends SpeedTestBase { | |||
protected void setUp() throws Exception { | |||
prepare(new String[] { "git", "rev-list", "365bbe0d0caaf2ba74d56556827babf0bc66965d" }); | |||
} | |||
public void testShallowHistoryScan() throws IOException { | |||
long start = System.currentTimeMillis(); | |||
Repository db = new Repository(new File(kernelrepo)); | |||
Commit commit = db.mapCommit("365bbe0d0caaf2ba74d56556827babf0bc66965d"); | |||
int n = 1; | |||
for (;;) { | |||
ObjectId[] parents = commit.getParentIds(); | |||
if (parents.length == 0) | |||
break; | |||
ObjectId parentId = parents[0]; | |||
commit = db.mapCommit(parentId); | |||
commit.getCommitId().name(); | |||
++n; | |||
} | |||
assertEquals(12275, n); | |||
long stop = System.currentTimeMillis(); | |||
long time = stop - start; | |||
System.out.println("native="+nativeTime); | |||
System.out.println("jgit="+time); | |||
// ~0.750s (hot cache), ok | |||
/* | |||
native=1795 | |||
jgit=722 | |||
*/ | |||
// native git seems to run SLOWER than jgit here, at roughly half the speed | |||
// creating the git process is not the issue here, btw. | |||
long factor10 = (nativeTime*150/time+50)/100; | |||
assertEquals(3, factor10); | |||
} | |||
public static void main(String[] args) { | |||
TestRunner.run(T0005_ShallowSpeedTest.class); | |||
} | |||
} |
@@ -0,0 +1,94 @@ | |||
/* | |||
* Copyright (C) 2007-2008, Robin Rosenberg <robin.rosenberg@dewire.com> | |||
* Copyright (C) 2007, Shawn O. Pearce <spearce@spearce.org> | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.lib; | |||
import java.io.File; | |||
import java.io.IOException; | |||
import junit.textui.TestRunner; | |||
public class T0006_DeepSpeedTest extends SpeedTestBase { | |||
protected void setUp() throws Exception { | |||
prepare(new String[] { "git", "rev-list", "365bbe0d0caaf2ba74d56556827babf0bc66965d","--","net/netfilter/nf_queue.c" }); | |||
} | |||
public void testDeepHistoryScan() throws IOException { | |||
long start = System.currentTimeMillis(); | |||
Repository db = new Repository(new File(kernelrepo)); | |||
Commit commit = db.mapCommit("365bbe0d0caaf2ba74d56556827babf0bc66965d"); | |||
int n = 1; | |||
for (;;) { | |||
ObjectId[] parents = commit.getParentIds(); | |||
if (parents.length == 0) | |||
break; | |||
ObjectId parentId = parents[0]; | |||
commit = db.mapCommit(parentId); | |||
TreeEntry m = commit.getTree().findBlobMember("net/netfilter/nf_queue.c"); | |||
if (m != null) | |||
commit.getCommitId().name(); | |||
++n; | |||
} | |||
assertEquals(12275, n); | |||
long stop = System.currentTimeMillis(); | |||
long time = stop - start; | |||
System.out.println("native="+nativeTime); | |||
System.out.println("jgit="+time); | |||
/* | |||
native=1355 | |||
jgit=5449 | |||
*/ | |||
// This is not an exact factor, but we'd expect native git to perform this | |||
// about 4 times quicker. If for some reason we find jgit to be faster than | |||
// this the cause should be found and secured. | |||
long factor = (time*110/nativeTime+50)/100; | |||
assertEquals(4, factor); | |||
} | |||
public static void main(String[] args) { | |||
TestRunner.run(T0006_DeepSpeedTest.class); | |||
} | |||
} |
@@ -0,0 +1,227 @@ | |||
/* | |||
* Copyright (C) 2008, Google Inc. | |||
* and other copyright owners as documented in the project's IP log. | |||
* | |||
* This program and the accompanying materials are made available | |||
* under the terms of the Eclipse Distribution License v1.0 which | |||
* accompanies this distribution, is reproduced below, and is | |||
* available at http://www.eclipse.org/org/documents/edl-v10.php | |||
* | |||
* All rights reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or | |||
* without modification, are permitted provided that the following | |||
* conditions are met: | |||
* | |||
* - Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* - Redistributions in binary form must reproduce the above | |||
* copyright notice, this list of conditions and the following | |||
* disclaimer in the documentation and/or other materials provided | |||
* with the distribution. | |||
* | |||
* - Neither the name of the Eclipse Foundation, Inc. nor the | |||
* names of its contributors may be used to endorse or promote | |||
* products derived from this software without specific prior | |||
* written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
*/ | |||
package org.eclipse.jgit.patch; | |||
import java.io.BufferedReader; | |||
import java.io.IOException; | |||
import java.io.InputStreamReader; | |||
import java.io.UnsupportedEncodingException; | |||
import java.util.HashMap; | |||
import java.util.HashSet; | |||
import junit.framework.TestCase; | |||
import org.eclipse.jgit.lib.Constants; | |||
import org.eclipse.jgit.util.MutableInteger; | |||
import org.eclipse.jgit.util.RawParseUtils; | |||
import org.eclipse.jgit.util.TemporaryBuffer; | |||
public class EGitPatchHistoryTest extends TestCase { | |||
public void testParseHistory() throws Exception { | |||
final NumStatReader numstat = new NumStatReader(); | |||
numstat.read(); | |||
final HashMap<String, HashMap<String, StatInfo>> stats = numstat.stats; | |||
assertEquals(1211, stats.size()); | |||
new PatchReader(stats).read(); | |||
} | |||
static class StatInfo { | |||
int added, deleted; | |||
} | |||
static class PatchReader extends CommitReader { | |||
final HashSet<String> offBy1; | |||
final HashMap<String, HashMap<String, StatInfo>> stats; | |||
int errors; | |||
PatchReader(final HashMap<String, HashMap<String, StatInfo>> s) | |||
throws IOException { | |||
super(new String[] { "-p" }); | |||
stats = s; | |||
offBy1 = new HashSet<String>(); | |||
offBy1.add("9bda5ece6806cd797416eaa47c7b927cc6e9c3b2"); | |||
} | |||
@Override | |||
void onCommit(String cid, byte[] buf) { | |||
final HashMap<String, StatInfo> files = stats.remove(cid); | |||
assertNotNull("No files for " + cid, files); | |||
final Patch p = new Patch(); | |||
p.parse(buf, 0, buf.length - 1); | |||
assertEquals("File count " + cid, files.size(), p.getFiles().size()); | |||
if (!p.getErrors().isEmpty()) { | |||
for (final FormatError e : p.getErrors()) { | |||
System.out.println("error " + e.getMessage()); | |||
System.out.println(" at " + e.getLineText()); | |||
} | |||
dump(buf); | |||
fail("Unexpected error in " + cid); | |||
} | |||
for (final FileHeader fh : p.getFiles()) { | |||
final String fileName; | |||
if (fh.getChangeType() != FileHeader.ChangeType.DELETE) | |||
fileName = fh.getNewName(); | |||
else | |||
fileName = fh.getOldName(); | |||
final StatInfo s = files.remove(fileName); | |||
final String nid = fileName + " in " + cid; | |||
assertNotNull("No " + nid, s); | |||
int added = 0, deleted = 0; | |||
for (final HunkHeader h : fh.getHunks()) { | |||
added += h.getOldImage().getLinesAdded(); | |||
deleted += h.getOldImage().getLinesDeleted(); | |||
} | |||
if (s.added == added) { | |||
// | |||
} else if (s.added == added + 1 && offBy1.contains(cid)) { | |||
// | |||
} else { | |||
dump(buf); | |||
assertEquals("Added diff in " + nid, s.added, added); | |||
} | |||
if (s.deleted == deleted) { | |||
// | |||
} else if (s.deleted == deleted + 1 && offBy1.contains(cid)) { | |||
// | |||
} else { | |||
dump(buf); | |||
assertEquals("Deleted diff in " + nid, s.deleted, deleted); | |||
} | |||
} | |||
assertTrue("Missed files in " + cid, files.isEmpty()); | |||
} | |||
private static void dump(final byte[] buf) { | |||
String str; | |||
try { | |||
str = new String(buf, 0, buf.length - 1, "ISO-8859-1"); | |||
} catch (UnsupportedEncodingException e) { | |||
throw new RuntimeException(e); | |||
} | |||
System.out.println("<<" + str + ">>"); | |||
} | |||
} | |||
static class NumStatReader extends CommitReader { | |||
final HashMap<String, HashMap<String, StatInfo>> stats = new HashMap<String, HashMap<String, StatInfo>>(); | |||
NumStatReader() throws IOException { | |||
super(new String[] { "--numstat" }); | |||
} | |||
@Override | |||
void onCommit(String commitId, byte[] buf) { | |||
final HashMap<String, StatInfo> files = new HashMap<String, StatInfo>(); | |||
final MutableInteger ptr = new MutableInteger(); | |||
while (ptr.value < buf.length) { | |||
if (buf[ptr.value] == '\n') | |||
break; | |||
final StatInfo i = new StatInfo(); | |||
i.added = RawParseUtils.parseBase10(buf, ptr.value, ptr); | |||
i.deleted = RawParseUtils.parseBase10(buf, ptr.value + 1, ptr); | |||
final int eol = RawParseUtils.nextLF(buf, ptr.value); | |||
final String name = RawParseUtils.decode(Constants.CHARSET, | |||
buf, ptr.value + 1, eol - 1); | |||
files.put(name, i); | |||
ptr.value = eol; | |||
} | |||
stats.put(commitId, files); | |||
} | |||
} | |||
static abstract class CommitReader { | |||
private Process proc; | |||
CommitReader(final String[] args) throws IOException { | |||
final String[] realArgs = new String[3 + args.length + 1]; | |||
realArgs[0] = "git"; | |||
realArgs[1] = "log"; | |||
realArgs[2] = "--pretty=format:commit %H"; | |||
System.arraycopy(args, 0, realArgs, 3, args.length); | |||
realArgs[3 + args.length] = "a4b98ed15ea5f165a7aa0f2fd2ea6fcce6710925"; | |||
proc = Runtime.getRuntime().exec(realArgs); | |||
proc.getOutputStream().close(); | |||
proc.getErrorStream().close(); | |||
} | |||
void read() throws IOException, InterruptedException { | |||
final BufferedReader in = new BufferedReader(new InputStreamReader( | |||
proc.getInputStream(), "ISO-8859-1")); | |||
String commitId = null; | |||
TemporaryBuffer buf = null; | |||
for (;;) { | |||
String line = in.readLine(); | |||
if (line == null) | |||
break; | |||
if (line.startsWith("commit ")) { | |||
if (buf != null) { | |||
buf.close(); | |||
onCommit(commitId, buf.toByteArray()); | |||
buf.destroy(); | |||
} | |||
commitId = line.substring("commit ".length()); | |||
buf = new TemporaryBuffer(); | |||
} else if (buf != null) { | |||
buf.write(line.getBytes("ISO-8859-1")); | |||
buf.write('\n'); | |||
} | |||
} | |||
in.close(); | |||
assertEquals(0, proc.waitFor()); | |||
proc = null; | |||
} | |||
abstract void onCommit(String commitId, byte[] buf); | |||
} | |||
} |
@@ -0,0 +1,21 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<launchConfiguration type="org.eclipse.jdt.junit.launchconfig"> | |||
<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/> | |||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value=""/> | |||
<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/> | |||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"> | |||
<listEntry value="4"/> | |||
</listAttribute> | |||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.jgit.test"/> | |||
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/> | |||
<listAttribute key="org.eclipse.debug.ui.favoriteGroups"> | |||
<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/> | |||
<listEntry value="org.eclipse.debug.ui.launchGroup.run"/> | |||
</listAttribute> | |||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"> | |||
<listEntry value="/org.eclipse.jgit.test"/> | |||
</listAttribute> | |||
<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value="=org.eclipse.jgit.test/exttst"/> | |||
<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/> | |||
<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit3"/> | |||
</launchConfiguration> |
@@ -0,0 +1,20 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<launchConfiguration type="org.eclipse.jdt.junit.launchconfig"> | |||
<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/> | |||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value=""/> | |||
<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/> | |||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"> | |||
<listEntry value="4"/> | |||
</listAttribute> | |||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.jgit.test"/> | |||
<listAttribute key="org.eclipse.debug.ui.favoriteGroups"> | |||
<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/> | |||
<listEntry value="org.eclipse.debug.ui.launchGroup.run"/> | |||
</listAttribute> | |||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"> | |||
<listEntry value="/org.eclipse.jgit.test"/> | |||
</listAttribute> | |||
<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value="=org.eclipse.jgit.test/exttst"/> | |||
<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/> | |||
<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit3"/> | |||
</launchConfiguration> |
@@ -0,0 +1,21 @@ | |||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
<launchConfiguration type="org.eclipse.jdt.junit.launchconfig"> | |||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"> | |||
<listEntry value="/org.eclipse.jgit.test/tst"/> | |||
</listAttribute> | |||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"> | |||
<listEntry value="2"/> | |||
</listAttribute> | |||
<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/> | |||
<listAttribute key="org.eclipse.debug.ui.favoriteGroups"> | |||
<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/> | |||
<listEntry value="org.eclipse.debug.ui.launchGroup.run"/> | |||
</listAttribute> | |||
<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value="=org.eclipse.jgit.test/tst"/> | |||
<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/> | |||
<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/> | |||
<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit3"/> | |||
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/> | |||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value=""/> | |||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.jgit.test"/> | |||
</launchConfiguration> |
@@ -0,0 +1,20 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<launchConfiguration type="org.eclipse.jdt.junit.launchconfig"> | |||
<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/> | |||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value=""/> | |||
<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/> | |||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"> | |||
<listEntry value="4"/> | |||
</listAttribute> | |||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.jgit.test"/> | |||
<listAttribute key="org.eclipse.debug.ui.favoriteGroups"> | |||
<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/> | |||
<listEntry value="org.eclipse.debug.ui.launchGroup.run"/> | |||
</listAttribute> | |||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"> | |||
<listEntry value="/org.eclipse.jgit.test"/> | |||
</listAttribute> | |||
<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value="=org.eclipse.jgit.test/tst"/> | |||
<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/> | |||
<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit3"/> | |||
</launchConfiguration> |
@@ -0,0 +1,6 @@ | |||
diff --git a/E b/E | |||
index e69de29..7898192 100644 | |||
--- a/E | |||
+++ b/E | |||
@@ -0,0 +1 @@ | |||
+a |
@@ -0,0 +1 @@ | |||
a |
@@ -0,0 +1,24 @@ | |||
diff --git a/X b/X | |||
index a3648a1..2d44096 100644 | |||
--- a/X | |||
+++ b/X | |||
@@ -2,2 +2,3 @@ a | |||
b | |||
+c | |||
d | |||
@@ -16,4 +17,2 @@ p | |||
q | |||
-r | |||
-s | |||
t | |||
@@ -22,4 +21,8 @@ v | |||
w | |||
-x | |||
-y | |||
+0 | |||
+1 | |||
+2 | |||
+3 | |||
+4 | |||
+5 | |||
z |
@@ -0,0 +1,28 @@ | |||
a | |||
b | |||
c | |||
d | |||
e | |||
f | |||
g | |||
h | |||
i | |||
j | |||
k | |||
l | |||
m | |||
n | |||
o | |||
p | |||
q | |||
t | |||
u | |||
v | |||
w | |||
0 | |||
1 | |||
2 | |||
3 | |||
4 | |||
5 | |||
z |
@@ -0,0 +1,25 @@ | |||
a | |||
b | |||
d | |||
e | |||
f | |||
g | |||
h | |||
i | |||
j | |||
k | |||
l | |||
m | |||
n | |||
o | |||
p | |||
q | |||
r | |||
s | |||
t | |||
u | |||
v | |||
w | |||
x | |||
y | |||
z |
@@ -0,0 +1,8 @@ | |||
diff --git a/Y b/Y | |||
index 2e65efe..7898192 100644 | |||
--- a/Y | |||
+++ b/Y | |||
@@ -1 +1 @@ | |||
-a | |||
\ No newline at end of file | |||
+a |
@@ -0,0 +1 @@ | |||
a |
@@ -0,0 +1 @@ | |||
a |
@@ -0,0 +1,8 @@ | |||
diff --git a/Z b/Z | |||
index 7898192..2e65efe 100644 | |||
--- a/Z | |||
+++ b/Z | |||
@@ -1 +1 @@ | |||
-a | |||
+a | |||
\ No newline at end of file |
@@ -0,0 +1 @@ | |||
a |
@@ -0,0 +1 @@ | |||
a |
@@ -0,0 +1,18 @@ | |||
diff --git a/X b/X | |||
index a3648a1..2d44096 100644 | |||
--- a/X | |||
+++ b/X | |||
@@ -2,0 +3 @@ | |||
+c | |||
@@ -17,2 +17,0 @@ | |||
-r | |||
-s | |||
@@ -23,2 +22,6 @@ | |||
-x | |||
-y | |||
+0 | |||
+1 | |||
+2 | |||
+3 | |||
+4 | |||
+5 |
@@ -0,0 +1,24 @@ | |||
diff --git a/X b/X | |||
index a3648a1..2d44096 100644 | |||
--- a/X | |||
+++ b/X | |||
@@ -2,2 +2,3 @@ | |||
b | |||
+c | |||
d | |||
@@ -16,4 +17,2 @@ | |||
q | |||
-r | |||
-s | |||
t | |||
@@ -22,4 +21,8 @@ | |||
w | |||
-x | |||
-y | |||
+0 | |||
+1 | |||
+2 | |||
+3 | |||
+4 | |||
+5 | |||
z |
@@ -0,0 +1,37 @@ | |||
diff --git a/X b/X | |||
index a3648a1..2d44096 100644 | |||
--- a/X | |||
+++ b/X | |||
@@ -1,25 +1,28 @@ | |||
a | |||
b | |||
+c | |||
d | |||
e | |||
f | |||
g | |||
h | |||
i | |||
j | |||
k | |||
l | |||
m | |||
n | |||
o | |||
p | |||
q | |||
-r | |||
-s | |||
t | |||
u | |||
v | |||
w | |||
-x | |||
-y | |||
+0 | |||
+1 | |||
+2 | |||
+3 | |||
+4 | |||
+5 | |||
z |
@@ -0,0 +1,37 @@ | |||
diff --git a/X b/X | |||
index a3648a1..2d44096 100644 | |||
--- a/X | |||
+++ b/X | |||
@@ -1,25 +1,28 @@ | |||
a | |||
b | |||
+c | |||
d | |||
e | |||
f | |||
g | |||
h | |||
i | |||
j | |||
k | |||
l | |||
m | |||
n | |||
o | |||
p | |||
q | |||
-r | |||
-s | |||
t | |||
u | |||
v | |||
w | |||
-x | |||
-y | |||
+0 | |||
+1 | |||
+2 | |||
+3 | |||
+4 | |||
+5 | |||
z |
@@ -0,0 +1,30 @@ | |||
diff --git a/X b/X | |||
index a3648a1..2d44096 100644 | |||
--- a/X | |||
+++ b/X | |||
@@ -1,5 +1,6 @@ | |||
a | |||
b | |||
+c | |||
d | |||
e | |||
f | |||
@@ -14,12 +15,14 @@ | |||
o | |||
p | |||
q | |||
-r | |||
-s | |||
t | |||
u | |||
v | |||
w | |||
-x | |||
-y | |||
+0 | |||
+1 | |||
+2 | |||
+3 | |||
+4 | |||
+5 | |||
z |
@@ -0,0 +1,34 @@ | |||
diff --git a/X b/X | |||
index a3648a1..2d44096 100644 | |||
--- a/X | |||
+++ b/X | |||
@@ -1,7 +1,8 @@ | |||
a | |||
b | |||
+c | |||
d | |||
e | |||
f | |||
g | |||
h | |||
@@ -12,14 +13,16 @@ | |||
m | |||
n | |||
o | |||
p | |||
q | |||
-r | |||
-s | |||
t | |||
u | |||
v | |||
w | |||
-x | |||
-y | |||
+0 | |||
+1 | |||
+2 | |||
+3 | |||
+4 | |||
+5 | |||
z |
@@ -0,0 +1 @@ | |||
*.patch -crlf |
@@ -0,0 +1,24 @@ | |||
diff --git a/X b/X | |||
index a3648a1..2d44096 100644 | |||
--- a/X | |||
+++ b/X | |||
@@ -2,2 +2,3 @@ a | |||
b | |||
+c | |||
d | |||
@@ -16,4 +17,2 @@ p | |||
q | |||
-r | |||
-s | |||
t | |||
@@ -22,4 +21,8 @@ v | |||
w | |||
-x | |||
-y | |||
+0 | |||
+1 | |||
+2 | |||
+3 | |||
+4 | |||
+5 | |||
z |
@@ -0,0 +1,17 @@ | |||
diff --git a/org.eclipse.jgit.test/tst/org/spearce/jgit/lib/RepositoryConfigTest.java b/org.eclipse.jgit.test/tst/org/spearce/jgit/lib/RepositoryConfigTest.java | |||
index da7e704..34ce04a 100644 | |||
--- a/org.eclipse.jgit.test/tst/org/spearce/jgit/lib/RepositoryConfigTest.java | |||
+++ b/org.eclipse.jgit.test/tst/org/spearce/jgit/lib/RepositoryConfigTest.java | |||
@@ -109,4 +109,11 @@ assertTrue(Arrays.equals(values.toArray(), repositoryConfig | |||
.getStringList("my", null, "somename"))); | |||
checkFile(cfgFile, "[my]\n\tsomename = value1\n\tsomename = value2\n"); | |||
} | |||
+ | |||
+ public void test006_readCaseInsensitive() throws IOException { | |||
+ final File path = writeTrashFile("config_001", "[Foo]\nBar\n"); | |||
+ RepositoryConfig repositoryConfig = new RepositoryConfig(null, path); | |||
+BAD LINE | |||
+ assertEquals(true, repositoryConfig.getBoolean("foo", null, "bar", false)); | |||
+ assertEquals("", repositoryConfig.getString("foo", null, "bar")); | |||
+ } | |||
} |