From: Marek Zawirski <marek.zawirski@gmail.com>
To: robin.rosenberg@dewire.com, spearce@spearce.org
Cc: git@vger.kernel.org, Marek Zawirski <marek.zawirski@gmail.com>
Subject: [EGIT PATCH 19/23] Repository search for command line tools
Date: Sat, 28 Jun 2008 00:06:43 +0200 [thread overview]
Message-ID: <1214604407-30572-20-git-send-email-marek.zawirski@gmail.com> (raw)
In-Reply-To: <1214604407-30572-19-git-send-email-marek.zawirski@gmail.com>
Introducing some simple search for git repository in parent directories
of current directory.
Previous version was annoying: we had to be in directory that contains
.git/ or specify it explicitly by --git-dir.
Signed-off-by: Marek Zawirski <marek.zawirski@gmail.com>
---
.../src/org/spearce/jgit/pgm/Main.java | 24 +++++++++++++++++--
1 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/org.spearce.jgit/src/org/spearce/jgit/pgm/Main.java b/org.spearce.jgit/src/org/spearce/jgit/pgm/Main.java
index 44f8a42..8afd0d7 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/pgm/Main.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/pgm/Main.java
@@ -85,12 +85,12 @@ public class Main {
private static void execute(final String[] argv) throws Exception {
int argi = 0;
- String gitdir = ".git";
+ File gitdir = null;
for (; argi < argv.length; argi++) {
final String arg = argv[argi];
if (arg.startsWith("--git-dir="))
- gitdir = arg.substring("--git-dir=".length());
+ gitdir = new File(arg.substring("--git-dir=".length()));
else if (arg.equals("--show-stack-trace"))
showStackTrace = true;
else if (arg.startsWith("--"))
@@ -101,8 +101,15 @@ public class Main {
if (argi == argv.length)
usage();
+ if (gitdir == null)
+ gitdir = findGitDir();
+ if (gitdir == null || !gitdir.isDirectory()) {
+ System.err.println("error: can't find git directory");
+ System.exit(1);
+ }
+
final TextBuiltin cmd = createCommand(argv[argi++]);
- cmd.db = new Repository(new File(gitdir));
+ cmd.db = new Repository(gitdir);
try {
cmd.execute(subarray(argv, argi));
} finally {
@@ -111,6 +118,17 @@ public class Main {
}
}
+ 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;
+ }
+
private static String[] subarray(final String[] argv, final int i) {
return Arrays.asList(argv).subList(i, argv.length).toArray(
new String[0]);
--
1.5.5.3
next prev parent reply other threads:[~2008-06-27 22:10 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-06-27 22:06 [EGIT PATCH 00/23] Push implementation Marek Zawirski
2008-06-27 22:06 ` [EGIT PATCH 01/23] Fix: let FetchProcess use fetch() instead of doFetch() Marek Zawirski
2008-06-27 22:06 ` [EGIT PATCH 02/23] RefUpdate: new possible result Result.IO_FAILURE Marek Zawirski
2008-06-27 22:06 ` [EGIT PATCH 03/23] Refactor TrackingRefUpdate to not hold RefSpec Marek Zawirski
2008-06-27 22:06 ` [EGIT PATCH 04/23] New constructor without RefSpec for TrackingRefUpdate Marek Zawirski
2008-06-27 22:06 ` [EGIT PATCH 05/23] Add RemoteRefUpdate class Marek Zawirski
2008-06-27 22:06 ` [EGIT PATCH 06/23] Refactor: extract superclass OperationResult from FetchResult Marek Zawirski
2008-06-27 22:06 ` [EGIT PATCH 07/23] Add PushResult class Marek Zawirski
2008-06-27 22:06 ` [EGIT PATCH 08/23] Support for fetchThin and pushThin options in Transport Marek Zawirski
2008-06-27 22:06 ` [EGIT PATCH 09/23] Big refactor: *Connection hierarchy Marek Zawirski
2008-06-27 22:06 ` [EGIT PATCH 10/23] Add ignoreMissingUninteresting option to PackWriter Marek Zawirski
2008-06-27 22:06 ` [EGIT PATCH 11/23] Add BasePackPushConnection implementing git-send-pack protocol Marek Zawirski
2008-06-27 22:06 ` [EGIT PATCH 12/23] Fix: let RevWalk reset correctly before isMergedInto() Marek Zawirski
2008-06-27 22:06 ` [EGIT PATCH 13/23] Add PushProcess class implementing git-send-pack logic Marek Zawirski
2008-06-27 22:06 ` [EGIT PATCH 14/23] Clarify Repository#resolve() documentation Marek Zawirski
2008-06-27 22:06 ` [EGIT PATCH 15/23] Add String versions of methods in RefSpec Marek Zawirski
2008-06-27 22:06 ` [EGIT PATCH 16/23] Transport* - general support for push() and implementations Marek Zawirski
2008-06-27 22:06 ` [EGIT PATCH 17/23] Test cases for PushProcess Marek Zawirski
2008-06-27 22:06 ` [EGIT PATCH 18/23] Test cases for RefSpec to RemoteRefUpdate conversions Marek Zawirski
2008-06-27 22:06 ` Marek Zawirski [this message]
2008-06-27 22:06 ` [EGIT PATCH 20/23] Push command line utility Marek Zawirski
2008-06-27 22:06 ` [EGIT PATCH 21/23] Don't accept RefSpec with null source for fetch Marek Zawirski
2008-06-27 22:06 ` [EGIT PATCH 22/23] Add new handy constructors to TransportException, PackProtocolException Marek Zawirski
2008-06-27 22:06 ` [EGIT PATCH 23/23] Use new TransportException constructors Marek Zawirski
2008-06-28 12:36 ` [EGIT PATCH 20/23] Push command line utility Robin Rosenberg
2008-06-27 23:25 ` [EGIT PATCH 00/23] Push implementation Robin Rosenberg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1214604407-30572-20-git-send-email-marek.zawirski@gmail.com \
--to=marek.zawirski@gmail.com \
--cc=git@vger.kernel.org \
--cc=robin.rosenberg@dewire.com \
--cc=spearce@spearce.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).