From: Junio C Hamano <junkio@cox.net>
To: Linus Torvalds <torvalds@osdl.org>
Cc: git@vger.kernel.org
Subject: [PATCH 1/8] git-apply: work from subdirectory.
Date: Sat, 26 Nov 2005 01:56:32 -0800 [thread overview]
Message-ID: <7viruf68bz.fsf@assigned-by-dhcp.cox.net> (raw)
In-Reply-To: 7vmzjtn3h1.fsf@assigned-by-dhcp.cox.net
This adds three things:
- prefix_filename() is like prefix_path() but can be used to
name any file on the filesystem, not the files that might go
into the index file.
- git-apply uses setup_git_directory() to find out the GIT_DIR
and reads configuration file. Later this would allow us to
affect the behaviour of the command from the configuration.
- When git-apply is run from a subdirectory, it applies the
given patch only to the files under the current directory and
below.
Signed-off-by: Junio C Hamano <junkio@cox.net>
---
apply.c | 15 +++++++++++++++
cache.h | 1 +
setup.c | 15 +++++++++++++++
3 files changed, 31 insertions(+), 0 deletions(-)
applies-to: 9ccf8849fa9b522a344645c2f28f12ab036e30d5
c20b8d006edfa964b3df5e4c5cc28cb93edcb240
diff --git a/apply.c b/apply.c
index 50be8f3..ae06d41 100644
--- a/apply.c
+++ b/apply.c
@@ -16,6 +16,9 @@
// --numstat does numeric diffstat, and doesn't actually apply
// --index-info shows the old and new index info for paths if available.
//
+static const char *prefix;
+static int prefix_length;
+
static int allow_binary_replacement = 0;
static int check_index = 0;
static int write_index = 0;
@@ -1706,6 +1709,12 @@ static int use_patch(struct patch *p)
return 0;
x = x->next;
}
+ if (prefix && *prefix) {
+ int pathlen = strlen(pathname);
+ if (pathlen <= prefix_length ||
+ memcmp(prefix, pathname, prefix_length))
+ return 0;
+ }
return 1;
}
@@ -1784,6 +1793,10 @@ int main(int argc, char **argv)
int i;
int read_stdin = 1;
+ prefix = setup_git_directory();
+ prefix_length = prefix ? strlen(prefix) : 0;
+ git_config(git_default_config);
+
for (i = 1; i < argc; i++) {
const char *arg = argv[i];
int fd;
@@ -1845,6 +1858,8 @@ int main(int argc, char **argv)
line_termination = 0;
continue;
}
+ arg = prefix_filename(prefix, prefix_length, arg);
+
fd = open(arg, O_RDONLY);
if (fd < 0)
usage(apply_usage);
diff --git a/cache.h b/cache.h
index 6ac94c5..62920ce 100644
--- a/cache.h
+++ b/cache.h
@@ -149,6 +149,7 @@ extern char *get_graft_file(void);
extern const char **get_pathspec(const char *prefix, const char **pathspec);
extern const char *setup_git_directory(void);
extern const char *prefix_path(const char *prefix, int len, const char *path);
+extern const char *prefix_filename(const char *prefix, int len, const char *path);
#define alloc_nr(x) (((x)+16)*3/2)
diff --git a/setup.c b/setup.c
index ab3c778..54f6a34 100644
--- a/setup.c
+++ b/setup.c
@@ -47,6 +47,21 @@ const char *prefix_path(const char *pref
return path;
}
+/*
+ * Unlike prefix_path, this should be used if the named file does
+ * not have to interact with index entry; i.e. name of a random file
+ * on the filesystem.
+ */
+const char *prefix_filename(const char *pfx, int pfx_len, const char *arg)
+{
+ static char path[PATH_MAX];
+ if (!pfx || !*pfx || arg[0] == '/')
+ return arg;
+ memcpy(path, pfx, pfx_len);
+ strcpy(path + pfx_len, arg);
+ return path;
+}
+
const char **get_pathspec(const char *prefix, const char **pathspec)
{
const char *entry = *pathspec;
---
0.99.9.GIT
next prev parent reply other threads:[~2005-11-26 9:56 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-11-20 17:00 Get rid of .git/branches/ and .git/remotes/? Johannes Schindelin
2005-11-20 18:09 ` Linus Torvalds
2005-11-20 18:29 ` Sven Verdoolaege
2005-11-20 19:07 ` Linus Torvalds
2005-11-20 19:16 ` Andreas Ericsson
2005-11-20 19:50 ` Johannes Schindelin
2005-11-26 23:50 ` Petr Baudis
2005-11-27 0:38 ` Junio C Hamano
2005-11-20 23:26 ` Josef Weidendorfer
2005-11-20 23:58 ` Johannes Schindelin
2005-11-22 17:31 ` Josef Weidendorfer
2005-11-22 17:56 ` Johannes Schindelin
2005-11-22 19:30 ` Andreas Ericsson
2005-11-23 15:08 ` Johannes Schindelin
2005-11-23 23:21 ` Junio C Hamano
2005-11-23 23:29 ` Andreas Ericsson
2005-11-23 23:42 ` Johannes Schindelin
2005-11-24 8:05 ` Andreas Ericsson
2005-11-24 8:33 ` Junio C Hamano
2005-11-24 10:36 ` [PATCH] Rename git-config-set to git-repo-config Johannes Schindelin
2005-11-24 11:33 ` Junio C Hamano
2005-11-24 13:28 ` Johannes Schindelin
2005-11-24 21:24 ` Junio C Hamano
2005-11-24 21:54 ` Johannes Schindelin
2005-11-26 2:22 ` Junio C Hamano
2005-11-26 4:05 ` Linus Torvalds
2005-11-26 4:07 ` Linus Torvalds
2005-11-26 9:51 ` [PATCH 0/8] Make C-level operable from subdirectories Junio C Hamano
2005-11-26 10:59 ` Junio C Hamano
2005-11-26 18:44 ` Ryan Anderson
2005-11-27 9:21 ` [PATCH 6/8] ls-tree: work from subdirectory Junio C Hamano
2005-11-27 11:08 ` Petr Baudis
2005-11-27 18:01 ` Linus Torvalds
2005-11-27 18:22 ` Petr Baudis
2005-11-27 19:00 ` Linus Torvalds
2005-11-28 1:07 ` Junio C Hamano
2005-11-28 1:46 ` Linus Torvalds
2005-11-28 6:11 ` Junio C Hamano
2005-11-28 6:48 ` Linus Torvalds
2005-11-28 8:32 ` Junio C Hamano
2005-11-28 10:51 ` Junio C Hamano
2005-11-28 10:51 ` [PATCH] ls-tree: Resurrect funny name quoting lost during rewrite Junio C Hamano
2005-11-26 5:52 ` [PATCH] Rename git-config-set to git-repo-config Junio C Hamano
2005-11-26 9:56 ` Junio C Hamano [this message]
2005-11-26 17:36 ` [PATCH 1/8] git-apply: work from subdirectory Linus Torvalds
2005-11-26 18:54 ` Junio C Hamano
2005-11-27 4:06 ` Junio C Hamano
2005-11-27 14:39 ` Lars Magne Ingebrigtsen
[not found] ` <7vy839dfzk.fsf@assigned-by-dhcp.cox.net>
2005-11-27 21:13 ` Lars Magne Ingebrigtsen
2005-11-27 22:12 ` Junio C Hamano
2005-11-26 9:56 ` [PATCH 2/8] peek-remote: honor proxy config even " Junio C Hamano
2005-11-26 9:56 ` [PATCH 3/8] fsck-objects: work " Junio C Hamano
2005-11-26 9:56 ` [PATCH 4/8] checkout-index: " Junio C Hamano
2005-11-26 9:57 ` [PATCH 5/8] hash-object: work within subdirectory Junio C Hamano
2005-11-26 9:57 ` [PATCH 6/8] ls-tree: work from subdirectory Junio C Hamano
2005-11-26 17:38 ` Linus Torvalds
2005-11-26 9:57 ` [PATCH 7/8] Make networking commands to work from a subdirectory Junio C Hamano
2005-11-26 9:57 ` [PATCH 8/8] Make the rest of commands " Junio C Hamano
2005-11-22 23:05 ` Get rid of .git/branches/ and .git/remotes/? Josef Weidendorfer
2005-11-23 14:53 ` Johannes Schindelin
2005-11-23 15:39 ` Josef Weidendorfer
2005-11-23 17:22 ` Johannes Schindelin
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=7viruf68bz.fsf@assigned-by-dhcp.cox.net \
--to=junkio@cox.net \
--cc=git@vger.kernel.org \
--cc=torvalds@osdl.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).