Browse Source
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 3a2dd9921c8a08740a9e02c421469e5b1a9e47cb. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>stable-0.7
Git Development Community
15 years ago
committed by
Shawn O. Pearce
commit
1a6964c827
561 changed files with 103222 additions and 0 deletions
@ -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,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,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,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,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"));
|
||||||
|
+ }
|
||||||
|
}
|
@ -0,0 +1,24 @@ |
|||||||
|
commit 1a56639bbea8e8cbfbe5da87746de97f9217ce9b
|
||||||
|
Date: Tue May 13 00:43:56 2008 +0200
|
||||||
|
...
|
||||||
|
|
||||||
|
diff --cc org.spearce.egit.ui/src/org/spearce/egit/ui/UIText.java
|
||||||
|
index 169356b,dd8c317..fd85931
|
||||||
|
mode 100644,100644..100755
|
||||||
|
--- a/org.spearce.egit.ui/src/org/spearce/egit/ui/UIText.java
|
||||||
|
+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/UIText.java
|
||||||
|
@@@ -55,12 -163,13 +163,15 @@@ public class UIText extends NLS
|
||||||
|
|
||||||
|
/** */
|
||||||
|
public static String ResourceHistory_toggleCommentWrap;
|
||||||
|
+
|
||||||
|
/** */
|
||||||
|
+ /** */
|
||||||
|
public static String ResourceHistory_toggleRevDetail;
|
||||||
|
/** */
|
||||||
|
public static String ResourceHistory_toggleRevComment;
|
||||||
|
/** */
|
||||||
|
public static String ResourceHistory_toggleTooltips;
|
||||||
|
|
||||||
|
|
||||||
|
commit 1a56639bbea8e8cbfbe5da87746de97f9217ce9b
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue