* [PATCH 07/10] t3409: use dashless "git commit" instead of "git-commit"
From: Matthew Ogilvie @ 2009-01-24 23:43 UTC (permalink / raw)
To: git; +Cc: Matthew Ogilvie
In-Reply-To: <1232840601-24696-7-git-send-email-mmogilvi_git@miniinfo.net>
This is needed to allow test suite to run against a minimal bin
directory instead of GIT_EXEC_PATH.
Signed-off-by: Matthew Ogilvie <mmogilvi_git@miniinfo.net>
---
Semi-related:
I noticed that there are actually two test cases numbered
t3409: t3409-rebase-hook.sh and t3409-rebase-preserve-merges.sh.
Should one of them be renumbered, or is it good enough as-is? I'm
just pointing this out; I don't intend to change it myself.
--
Matthew Ogilvie [mmogilvi_git@miniinfo.net]
t/t3409-rebase-preserve-merges.sh | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/t/t3409-rebase-preserve-merges.sh b/t/t3409-rebase-preserve-merges.sh
index e6c8327..8878771 100755
--- a/t/t3409-rebase-preserve-merges.sh
+++ b/t/t3409-rebase-preserve-merges.sh
@@ -32,14 +32,14 @@ export GIT_AUTHOR_EMAIL
test_expect_success 'setup for merge-preserving rebase' \
'echo First > A &&
git add A &&
- git-commit -m "Add A1" &&
+ git commit -m "Add A1" &&
git checkout -b topic &&
echo Second > B &&
git add B &&
- git-commit -m "Add B1" &&
+ git commit -m "Add B1" &&
git checkout -f master &&
echo Third >> A &&
- git-commit -a -m "Modify A2" &&
+ git commit -a -m "Modify A2" &&
git clone ./. clone1 &&
cd clone1 &&
--
1.6.1.81.g9833d.dirty
^ permalink raw reply related
* [PATCH 08/10] run test suite without dashed git-commands in PATH
From: Matthew Ogilvie @ 2009-01-24 23:43 UTC (permalink / raw)
To: git; +Cc: Matthew Ogilvie, Johannes.Schindelin
In-Reply-To: <1232840601-24696-8-git-send-email-mmogilvi_git@miniinfo.net>
Exclude GIT_EXEC_PATH from PATH, to emulate the default user environment,
and ensure all the programs (especially scripts) run correctly in
such an environment.
This works by creating a test-bin directory with wrapper scripts for
the programs normally installed in "bin", and only including that
directory in the PATH.
Signed-off-by: Matthew Ogilvie <mmogilvi_git@miniinfo.net>
---
Valgrind conflict: As I was preparing this email, I noticed that a patch
for running the test suite under valgrind has been under discussion
in the mailing list. The valgrind patch probably conflicts with this
one. I've thought of some possible ways to resolve it:
1. Extend this patch to support valgrind by adding
environment-variable controlled hook to test-bin-wrapper.sh,
and enhance the makefile rules to disable the valgrind hook
for instances of the script that are wrapping other scripts.
(This allows dashless, valgrind, or both.)
2. Or change the valgrind patch to only add executables typically
found in bindir (not GIT_EXEC_PATH) to the symlink directory. To
support dashless by itself, it would need to do a similar symlink
when asked for dashless without valgrind.
3. Or keep the core of both patches, and just fix up the setup
in test-lib.sh to only enable one or the other (never both).
Thoughts?
--
Matthew Ogilvie [mmogilvi_git@miniinfo.net]
.gitignore | 1 +
Makefile | 42 +++++++++++++++++++++++++++++++-----------
t/test-lib.sh | 14 +++++++++++++-
test-bin-wrapper.sh | 12 ++++++++++++
4 files changed, 57 insertions(+), 12 deletions(-)
create mode 100644 test-bin-wrapper.sh
diff --git a/.gitignore b/.gitignore
index d9adce5..13a0d33 100644
--- a/.gitignore
+++ b/.gitignore
@@ -143,6 +143,7 @@ git-write-tree
git-core-*/?*
gitk-wish
gitweb/gitweb.cgi
+test-bin
test-chmtime
test-date
test-delta
diff --git a/Makefile b/Makefile
index b4d9cb4..197a6f0 100644
--- a/Makefile
+++ b/Makefile
@@ -330,6 +330,15 @@ ALL_PROGRAMS = $(PROGRAMS) $(SCRIPTS)
# what 'all' will build but not install in gitexecdir
OTHER_PROGRAMS = git$X gitweb/gitweb.cgi
+# what test wrappers are needed and 'install' will install, in bindir
+BINDIR_PROGRAMS_NEED_X += git
+BINDIR_PROGRAMS_NEED_X += git-upload-pack
+BINDIR_PROGRAMS_NEED_X += git-receive-pack
+BINDIR_PROGRAMS_NEED_X += git-upload-archive
+BINDIR_PROGRAMS_NEED_X += git-shell
+
+BINDIR_PROGRAMS_NO_X += git-cvsserver
+
# Set paths to tools early so that they can be used for version tests.
ifndef SHELL_PATH
SHELL_PATH = /bin/sh
@@ -1356,17 +1365,25 @@ endif
### Testing rules
-TEST_PROGRAMS += test-chmtime$X
-TEST_PROGRAMS += test-ctype$X
-TEST_PROGRAMS += test-date$X
-TEST_PROGRAMS += test-delta$X
-TEST_PROGRAMS += test-genrandom$X
-TEST_PROGRAMS += test-match-trees$X
-TEST_PROGRAMS += test-parse-options$X
-TEST_PROGRAMS += test-path-utils$X
-TEST_PROGRAMS += test-sha1$X
+TEST_PROGRAMS_NEED_X += test-chmtime
+TEST_PROGRAMS_NEED_X += test-ctype
+TEST_PROGRAMS_NEED_X += test-date
+TEST_PROGRAMS_NEED_X += test-delta
+TEST_PROGRAMS_NEED_X += test-genrandom
+TEST_PROGRAMS_NEED_X += test-match-trees
+TEST_PROGRAMS_NEED_X += test-parse-options
+TEST_PROGRAMS_NEED_X += test-path-utils
+TEST_PROGRAMS_NEED_X += test-sha1
+
+TEST_PROGRAMS = $(patsubst %,%$X,$(TEST_PROGRAMS_NEED_X))
-all:: $(TEST_PROGRAMS)
+test_bindir_programs := $(patsubst %,test-bin/%,$(BINDIR_PROGRAMS_NEED_X) $(BINDIR_PROGRAMS_NO_X) $(TEST_PROGRAMS_NEED_X))
+
+all:: $(TEST_PROGRAMS) $(test_bindir_programs)
+
+test-bin/%: test-bin-wrapper.sh
+ @mkdir -p test-bin
+ $(QUIET_GEN)sed -e 's|__GIT_EXEC_PATH__|$(shell pwd)|' -e 's|__PROG__|$(@F)|' < $< > $@ && chmod +x $@
# GNU make supports exporting all variables by "export" without parameters.
# However, the environment gets quite big, and some programs have problems
@@ -1425,11 +1442,13 @@ endif
gitexec_instdir_SQ = $(subst ','\'',$(gitexec_instdir))
export gitexec_instdir
+install_bindir_programs := $(patsubst %,%$X,$(BINDIR_PROGRAMS_NEED_X)) $(BINDIR_PROGRAMS_NO_X)
+
install: all
$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'
$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
$(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
- $(INSTALL) git$X git-upload-pack$X git-receive-pack$X git-upload-archive$X git-shell$X git-cvsserver '$(DESTDIR_SQ)$(bindir_SQ)'
+ $(INSTALL) $(install_bindir_programs) '$(DESTDIR_SQ)$(bindir_SQ)'
$(MAKE) -C templates DESTDIR='$(DESTDIR_SQ)' install
$(MAKE) -C perl prefix='$(prefix_SQ)' DESTDIR='$(DESTDIR_SQ)' install
ifndef NO_TCLTK
@@ -1533,6 +1552,7 @@ clean:
$(LIB_FILE) $(XDIFF_LIB)
$(RM) $(ALL_PROGRAMS) $(BUILT_INS) git$X
$(RM) $(TEST_PROGRAMS)
+ $(RM) -r test-bin
$(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo common-cmds.h TAGS tags cscope*
$(RM) -r autom4te.cache
$(RM) config.log config.mak.autogen config.mak.append config.status config.cache
diff --git a/t/test-lib.sh b/t/test-lib.sh
index 41d5a59..2f42b5b 100644
--- a/t/test-lib.sh
+++ b/t/test-lib.sh
@@ -89,6 +89,8 @@ do
verbose=t; shift ;;
-q|--q|--qu|--qui|--quie|--quiet)
quiet=t; shift ;;
+ --with-dashes)
+ with_dashes=t; shift ;;
--no-color)
color=; shift ;;
--no-python)
@@ -467,8 +469,18 @@ test_done () {
# Test the binaries we have just built. The tests are kept in
# t/ subdirectory and are run in 'trash directory' subdirectory.
TEST_DIRECTORY=$(pwd)
-PATH=$TEST_DIRECTORY/..:$PATH
GIT_EXEC_PATH=$(pwd)/..
+git_bin_dir="$TEST_DIRECTORY/../test-bin"
+if ! test -x "$git_bin_dir/git" ; then
+ if test -z "$with_dashes" ; then
+ say "$git_bin_dir/git is not executable; using GIT_EXEC_PATH"
+ fi
+ with_dashes=t
+fi
+PATH="$git_bin_dir:$PATH"
+if test -n "$with_dashes" ; then
+ PATH="$TEST_DIRECTORY/..:$PATH"
+fi
GIT_TEMPLATE_DIR=$(pwd)/../templates/blt
unset GIT_CONFIG
GIT_CONFIG_NOSYSTEM=1
diff --git a/test-bin-wrapper.sh b/test-bin-wrapper.sh
new file mode 100644
index 0000000..199d098
--- /dev/null
+++ b/test-bin-wrapper.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+# test-bin-wrapper.sh: Template for git executable wrapper scripts
+# to run test suite against sandbox, but with only bindir-installed
+# executables in PATH. The Makefile copies this into various
+# files in test-bin, substituting __GIT_EXEC_PATH__ and __PROG__.
+
+GIT_EXEC_PATH="__GIT_EXEC_PATH__"
+GIT_TEMPLATE_DIR="__GIT_EXEC_PATH__/templates/blt"
+export GIT_EXEC_PATH GIT_TEMPLATE_DIR
+
+exec "${GIT_EXEC_PATH}/__PROG__" "$@"
--
1.6.1.81.g9833d.dirty
^ permalink raw reply related
* Re: [PATCH] mergetool merge/skip/abort
From: Caleb Cushing @ 2009-01-25 0:18 UTC (permalink / raw)
To: Nanako Shiraishi; +Cc: Junio C Hamano, Charles Bailey, git
In-Reply-To: <20090125064539.6117@nanako3.lavabit.com>
> 1. You copy-and-pasted output from format-patch, and have the header
> part in the message body. Charles and Johannes have moved them to the
> Email header.
>
> Their messages are in the form the tool used for patch acceptance
> expects. Yours isn't, and forces Junio to manually edit your message
> before handling it.
I'll get to the rest later...
but I tried sending the patch via email as you said followed this...
verbatim except replacing user@ and p4ssw0rd with my credentials, and
I got an auth error back. currently I've no idea how I would send
stuff from gmail. and I reject inline patches in funtoo because I use
webmail and they are impossible for me to handle easily.
Submitting properly formatted patches via Gmail is simple now that
IMAP support is available. First, edit your ~/.gitconfig to specify your
account settings:
[imap]
folder = "[Gmail]/Drafts"
host = imaps://imap.gmail.com
user = user@gmail.com
pass = p4ssw0rd
port = 993
sslverify = false
Next, ensure that your Gmail settings are correct. In "Settings" the
"Use Unicode (UTF-8) encoding for outgoing messages" should be checked.
Once your commits are ready to send to the mailing list, run the following
command to send the patch emails to your Gmail Drafts folder.
$ git format-patch -M --stdout origin/master | git imap-send
--
Caleb Cushing
http://xenoterracide.blogspot.com
^ permalink raw reply
* Re: [PATCH] Allow cloning an empty repository
From: Miklos Vajna @ 2009-01-25 0:49 UTC (permalink / raw)
To: Sverre Rabbelier; +Cc: Johannes Schindelin, Junio C Hamano, git
In-Reply-To: <bd6139dc0901231642v6bd593d3mfefaca3c419a9f0a@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 144 bytes --]
On Sat, Jan 24, 2009 at 01:42:30AM +0100, Sverre Rabbelier <srabbelier@gmail.com> wrote:
> Which means all protocols actually die?
I think so.
[-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]
^ permalink raw reply
* [PATCH 0/2] Add submodule-support to git archive
From: Lars Hjemli @ 2009-01-25 0:52 UTC (permalink / raw)
To: Junio C Hamano, Johannes Schindelin; +Cc: git
This is a cleaned up version of my previous patches which allows git archive
to include submodule content in the archive output.
The main difference between this series and the previous ones is that the
behaviour of `git archive --submodules` are now predictable; the content
included from submodules is defined by the gitlink entries found when
traversing the <tree-ish> specified on the command line, and the set of
submodules to include are defined by specifying either `--submodules=all` or
`--submodules=checkedout` (which is the default mode of operation, i.e. what
you get by only specifying `--submodules`).
To make the `--submodules` option more userfriendly, any submodule repository
discovered during traversal will be registered as an alternate odb (this
will typically be required to make the inter-repository traversal succeed).
Finally, the option `--submodules=group:<name>` is not yet implemented. I
wanted to get these first two patches published early since they define the
semantics of the --submodules option. Adding a 'group' selector on top is
mostly a question of pulling information out of .gitmodules and .git/config,
i.e. not very exciting (but it will be done ;-)
Lars Hjemli (2):
tree.c: allow read_tree_recursive() to traverse gitlink entries
archive.c: add support for --submodules[=(all|checkedout)]
Documentation/git-archive.txt | 5 ++
archive.c | 81 +++++++++++++++++++++++++-
archive.h | 4 +
builtin-ls-tree.c | 9 +--
cache.h | 1 +
merge-recursive.c | 2 +-
sha1_file.c | 11 +++-
t/t5001-archive-submodules.sh | 129 +++++++++++++++++++++++++++++++++++++++++
tree.c | 28 +++++++++
9 files changed, 259 insertions(+), 11 deletions(-)
create mode 100755 t/t5001-archive-submodules.sh
^ permalink raw reply
* [PATCH 1/2] tree.c: allow read_tree_recursive() to traverse gitlink entries
From: Lars Hjemli @ 2009-01-25 0:52 UTC (permalink / raw)
To: Junio C Hamano, Johannes Schindelin; +Cc: git
In-Reply-To: <1232844726-14902-1-git-send-email-hjemli@gmail.com>
When the callback function invoked from read_tree_recursive() returns
the value `READ_TREE_RECURSIVE` for a gitlink entry, the traversal will
now continue into the tree connected to the gitlinked commit. This
functionality can be used to allow inter-repository operations, but
since the current users of read_tree_recursive() does not yet support
such operations, they have been modified where necessary to make sure
that they never return READ_TREE_RECURSIVE for gitlink entries (hence
no change in behaviour should be introduces by this patch alone).
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
---
archive.c | 2 +-
builtin-ls-tree.c | 9 ++-------
merge-recursive.c | 2 +-
tree.c | 28 ++++++++++++++++++++++++++++
4 files changed, 32 insertions(+), 9 deletions(-)
diff --git a/archive.c b/archive.c
index 9ac455d..e6de039 100644
--- a/archive.c
+++ b/archive.c
@@ -132,7 +132,7 @@ static int write_archive_entry(const unsigned char *sha1, const char *base,
err = write_entry(args, sha1, path.buf, path.len, mode, NULL, 0);
if (err)
return err;
- return READ_TREE_RECURSIVE;
+ return (S_ISDIR(mode) ? READ_TREE_RECURSIVE : 0);
}
buffer = sha1_file_to_archive(path_without_prefix, sha1, mode,
diff --git a/builtin-ls-tree.c b/builtin-ls-tree.c
index 5b63e6e..fca4631 100644
--- a/builtin-ls-tree.c
+++ b/builtin-ls-tree.c
@@ -68,13 +68,8 @@ static int show_tree(const unsigned char *sha1, const char *base, int baselen,
*
* Something similar to this incomplete example:
*
- if (show_subprojects(base, baselen, pathname)) {
- struct child_process ls_tree;
-
- ls_tree.dir = base;
- ls_tree.argv = ls-tree;
- start_command(&ls_tree);
- }
+ if (show_subprojects(base, baselen, pathname))
+ retval = READ_TREE_RECURSIVE;
*
*/
type = commit_type;
diff --git a/merge-recursive.c b/merge-recursive.c
index b97026b..ee853b9 100644
--- a/merge-recursive.c
+++ b/merge-recursive.c
@@ -237,7 +237,7 @@ static int save_files_dirs(const unsigned char *sha1,
string_list_insert(newpath, &o->current_file_set);
free(newpath);
- return READ_TREE_RECURSIVE;
+ return (S_ISDIR(mode) ? READ_TREE_RECURSIVE : 0);
}
static int get_files_dirs(struct merge_options *o, struct tree *tree)
diff --git a/tree.c b/tree.c
index 03e782a..dfe4d5f 100644
--- a/tree.c
+++ b/tree.c
@@ -131,6 +131,34 @@ int read_tree_recursive(struct tree *tree,
if (retval)
return -1;
continue;
+ } else if (S_ISGITLINK(entry.mode)) {
+ int retval;
+ struct strbuf path;
+ unsigned int entrylen;
+ struct commit *commit;
+
+ entrylen = tree_entry_len(entry.path, entry.sha1);
+ strbuf_init(&path, baselen + entrylen + 1);
+ strbuf_add(&path, base, baselen);
+ strbuf_add(&path, entry.path, entrylen);
+ strbuf_addch(&path, '/');
+
+ commit = lookup_commit(entry.sha1);
+ if (!commit)
+ die("Commit %s in submodule path %s not found",
+ sha1_to_hex(entry.sha1), path.buf);
+
+ if (parse_commit(commit))
+ die("Invalid commit %s in submodule path %s",
+ sha1_to_hex(entry.sha1), path.buf);
+
+ retval = read_tree_recursive(commit->tree,
+ path.buf, path.len,
+ stage, match, fn, context);
+ strbuf_release(&path);
+ if (retval)
+ return -1;
+ continue;
}
}
return 0;
--
1.6.1.150.g5e733b
^ permalink raw reply related
* [PATCH 2/2] archive.c: add support for --submodules[=(all|checkedout)]
From: Lars Hjemli @ 2009-01-25 0:52 UTC (permalink / raw)
To: Junio C Hamano, Johannes Schindelin; +Cc: git
In-Reply-To: <1232844726-14902-2-git-send-email-hjemli@gmail.com>
The --submodules option uses the enhanced read_tree_recursive() to
enable inclusion of submodules in the generated archive.
When invoked with `--submodules=all` all gitlink entries will be
traversed, and when invoked with --submodules=checkedout (the default
option) only gitlink entries with a git repo (i.e. checked out sub-
modules) will be traversed.
When a gitlink has been selected for traversal, it is required that all
objects necessary to perform this traversal are available in either the
primary odb or through an alternate odb. To this end, git archive will
insert the object database of the selected gitlink (when checked out)
as an alternate odb, using the new function add_alt_odb(). And since
alternates now can be added after parsing of objects/info/alternates,
the error message in link_alt_odb_entry() has been updated to not
mention this file.
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
---
Documentation/git-archive.txt | 5 ++
archive.c | 81 +++++++++++++++++++++++++-
archive.h | 4 +
cache.h | 1 +
sha1_file.c | 11 +++-
t/t5001-archive-submodules.sh | 129 +++++++++++++++++++++++++++++++++++++++++
6 files changed, 228 insertions(+), 3 deletions(-)
create mode 100755 t/t5001-archive-submodules.sh
diff --git a/Documentation/git-archive.txt b/Documentation/git-archive.txt
index 41cbf9c..6068302 100644
--- a/Documentation/git-archive.txt
+++ b/Documentation/git-archive.txt
@@ -47,6 +47,11 @@ OPTIONS
--prefix=<prefix>/::
Prepend <prefix>/ to each filename in the archive.
+--submodules[=<spec>]::
+ Include the content of submodules in the archive. The specification
+ of which submodules to include can be either 'checkedout' (default)
+ or 'all'.
+
<extra>::
This can be any options that the archiver backend understand.
See next section.
diff --git a/archive.c b/archive.c
index e6de039..bb0c5c8 100644
--- a/archive.c
+++ b/archive.c
@@ -4,6 +4,7 @@
#include "attr.h"
#include "archive.h"
#include "parse-options.h"
+#include "refs.h"
static char const * const archive_usage[] = {
"git archive [options] <tree-ish> [path...]",
@@ -91,6 +92,70 @@ static void setup_archive_check(struct git_attr_check *check)
check[1].attr = attr_export_subst;
}
+static int include_repository(const char *path)
+{
+ struct stat st;
+ const char *tmp;
+
+ /* Return early if the path does not exist since it is OK to not
+ * checkout submodules.
+ */
+ if (stat(path, &st) && errno == ENOENT)
+ return 1;
+
+ tmp = read_gitfile_gently(path);
+ if (tmp) {
+ path = tmp;
+ if (stat(path, &st))
+ die("Unable to stat submodule gitdir %s: %s (%d)",
+ path, strerror(errno), errno);
+ }
+
+ if (!S_ISDIR(st.st_mode))
+ die("Submodule gitdir %s is not a directory", path);
+
+ if (add_alt_odb(mkpath("%s/objects", path)))
+ die("submodule odb %s could not be added as an alternate",
+ path);
+
+ return 0;
+}
+
+static int check_gitlink(struct archiver_args *args, const unsigned char *sha1,
+ const char *path)
+{
+ switch (args->submodules) {
+ case 0:
+ return 0;
+
+ case SUBMODULES_ALL:
+ /* When all submodules are requested, we try to add any
+ * checked out submodules as alternate odbs. But we don't
+ * really care whether any particular submodule is checked
+ * out or not, we are going to try to traverse it anyways.
+ */
+ include_repository(mkpath("%s.git", path));
+ return READ_TREE_RECURSIVE;
+
+ case SUBMODULES_CHECKEDOUT:
+ /* If a repo is checked out at the gitlink path, we want to
+ * traverse into the submodule. But we ignore the current
+ * HEAD of the checked out submodule and always uses the SHA1
+ * recorded in the gitlink entry since we want the content
+ * of the archive to match the content of the <tree-ish>
+ * specified on the command line.
+ */
+ if (!include_repository(mkpath("%s.git", path)))
+ return READ_TREE_RECURSIVE;
+ else
+ return 0;
+
+ default:
+ die("archive.c: invalid value for args->submodules: %d",
+ args->submodules);
+ }
+}
+
struct archiver_context {
struct archiver_args *args;
write_archive_entry_fn_t write_entry;
@@ -132,7 +197,8 @@ static int write_archive_entry(const unsigned char *sha1, const char *base,
err = write_entry(args, sha1, path.buf, path.len, mode, NULL, 0);
if (err)
return err;
- return (S_ISDIR(mode) ? READ_TREE_RECURSIVE : 0);
+ return (S_ISDIR(mode) ? READ_TREE_RECURSIVE :
+ check_gitlink(args, sha1, path.buf));
}
buffer = sha1_file_to_archive(path_without_prefix, sha1, mode,
@@ -253,6 +319,7 @@ static int parse_archive_args(int argc, const char **argv,
const char *base = NULL;
const char *remote = NULL;
const char *exec = NULL;
+ const char *submodules = NULL;
int compression_level = -1;
int verbose = 0;
int i;
@@ -262,6 +329,9 @@ static int parse_archive_args(int argc, const char **argv,
OPT_STRING(0, "format", &format, "fmt", "archive format"),
OPT_STRING(0, "prefix", &base, "prefix",
"prepend prefix to each pathname in the archive"),
+ {OPTION_STRING, 0, "submodules", &submodules, "kind",
+ "include submodule content in the archive",
+ PARSE_OPT_OPTARG, NULL, (intptr_t)"checkedout"},
OPT__VERBOSE(&verbose),
OPT__COMPR('0', &compression_level, "store only", 0),
OPT__COMPR('1', &compression_level, "compress faster", 1),
@@ -316,6 +386,15 @@ static int parse_archive_args(int argc, const char **argv,
format, compression_level);
}
}
+
+ if (!submodules)
+ args->submodules = 0;
+ else if (!strcmp(submodules, "checkedout"))
+ args->submodules = SUBMODULES_CHECKEDOUT;
+ else if (!strcmp(submodules, "all"))
+ args->submodules = SUBMODULES_ALL;
+ else
+ die("Invalid submodule kind: %s", submodules);
args->verbose = verbose;
args->base = base;
args->baselen = strlen(base);
diff --git a/archive.h b/archive.h
index 0b15b35..2b078b6 100644
--- a/archive.h
+++ b/archive.h
@@ -11,8 +11,12 @@ struct archiver_args {
const char **pathspec;
unsigned int verbose : 1;
int compression_level;
+ int submodules;
};
+#define SUBMODULES_CHECKEDOUT 1
+#define SUBMODULES_ALL 2
+
typedef int (*write_archive_fn_t)(struct archiver_args *);
typedef int (*write_archive_entry_fn_t)(struct archiver_args *args, const unsigned char *sha1, const char *path, size_t pathlen, unsigned int mode, void *buffer, unsigned long size);
diff --git a/cache.h b/cache.h
index 8d965b8..ea53e4b 100644
--- a/cache.h
+++ b/cache.h
@@ -728,6 +728,7 @@ extern struct alternate_object_database {
char base[FLEX_ARRAY]; /* more */
} *alt_odb_list;
extern void prepare_alt_odb(void);
+extern int add_alt_odb(const char *path);
extern void add_to_alternates_file(const char *reference);
typedef int alt_odb_fn(struct alternate_object_database *, void *);
extern void foreach_alt_odb(alt_odb_fn, void*);
diff --git a/sha1_file.c b/sha1_file.c
index 360f7e5..53d8db7 100644
--- a/sha1_file.c
+++ b/sha1_file.c
@@ -285,8 +285,7 @@ static int link_alt_odb_entry(const char * entry, int len, const char * relative
/* Detect cases where alternate disappeared */
if (!is_directory(ent->base)) {
- error("object directory %s does not exist; "
- "check .git/objects/info/alternates.",
+ error("Alternate object directory %s does not exist",
ent->base);
free(ent);
return -1;
@@ -2573,3 +2572,11 @@ int read_pack_header(int fd, struct pack_header *header)
return PH_ERROR_PROTOCOL;
return 0;
}
+
+int add_alt_odb(const char *path)
+{
+ int err = link_alt_odb_entry(path, strlen(path), NULL, 0);
+ if (!err)
+ prepare_packed_git_one((char *)path, 0);
+ return err;
+}
diff --git a/t/t5001-archive-submodules.sh b/t/t5001-archive-submodules.sh
new file mode 100755
index 0000000..14383b3
--- /dev/null
+++ b/t/t5001-archive-submodules.sh
@@ -0,0 +1,129 @@
+#!/bin/sh
+
+test_description='git archive can include submodule content'
+
+. ./test-lib.sh
+
+add_file()
+{
+ git add $1 &&
+ git commit -m "added $1"
+}
+
+add_submodule()
+{
+ mkdir $1 && (
+ cd $1 &&
+ git init &&
+ echo "File $2" >$2 &&
+ add_file $2
+ ) &&
+ add_file $1
+}
+
+test_expect_success 'by default, submodules are not included' '
+ echo "File 1" >1 &&
+ add_file 1 &&
+ add_submodule 2 3 &&
+ add_submodule 4 5 &&
+ cat <<EOF >expected &&
+1
+2/
+4/
+EOF
+ git archive HEAD >normal.tar &&
+ tar -tf normal.tar >actual &&
+ test_cmp expected actual
+'
+
+test_expect_success 'with --submodules, checked out submodules are included' '
+ cat <<EOF >expected &&
+1
+2/
+2/3
+4/
+4/5
+EOF
+ git archive --submodules HEAD >full.tar &&
+ tar -tf full.tar >actual &&
+ test_cmp expected actual
+'
+
+test_expect_success 'with --submodules=all, all submodules are included' '
+ git archive --submodules=all HEAD >all.tar &&
+ tar -tf all.tar >actual &&
+ test_cmp expected actual
+'
+
+test_expect_success 'submodules in submodules are supported' '
+ (cd 4 && add_submodule 6 7) &&
+ add_file 4 &&
+ cat <<EOF >expected &&
+1
+2/
+2/3
+4/
+4/5
+4/6/
+4/6/7
+EOF
+ git archive --submodules HEAD >recursive.tar &&
+ tar -tf recursive.tar >actual &&
+ test_cmp expected actual
+'
+
+test_expect_success 'packed submodules are supported' '
+ msg=$(cd 2 && git repack -ad && git count-objects) &&
+ test "$msg" = "0 objects, 0 kilobytes" &&
+ git archive --submodules HEAD >packed.tar &&
+ tar -tf packed.tar >actual &&
+ test_cmp expected actual
+'
+
+test_expect_success 'missing submodule packs triggers an error' '
+ mv 2/.git/objects/pack .git/packdir2 &&
+ test_must_fail git archive --submodules HEAD
+'
+
+test_expect_success '--submodules skips non-checked out submodules' '
+ cat <<EOF >expected &&
+1
+2/
+4/
+4/5
+4/6/
+4/6/7
+EOF
+ rm -rf 2/.git &&
+ git archive --submodules HEAD >partial.tar &&
+ tar -tf partial.tar >actual &&
+ test_cmp expected actual
+'
+
+test_expect_success '--submodules=all fails if gitlinked objects are missing' '
+ test_must_fail git archive --submodules=all HEAD
+'
+
+test_expect_success \
+ '--submodules=all does not require submodules to be checked out' '
+ cat <<EOF >expected &&
+1
+2/
+2/3
+4/
+4/5
+4/6/
+4/6/7
+EOF
+ mv .git/packdir2/* .git/objects/pack/ &&
+ git archive --submodules=all HEAD >all2.tar &&
+ tar -tf all2.tar >actual &&
+ test_cmp expected actual
+'
+
+test_expect_success 'missing objects in a submodule triggers an error' '
+ find 4/.git/objects -type f | xargs rm &&
+ test_must_fail git archive --submodules HEAD
+'
+
+test_done
--
1.6.1.150.g5e733b
^ permalink raw reply related
* Re: [PATCH] Allow cloning an empty repository
From: Sverre Rabbelier @ 2009-01-25 0:55 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Johannes Schindelin, Git Mailinglist, Miklos Vajna
In-Reply-To: <20090125004955.GY21473@genesis.frugalware.org>
Heya,
On Sun, Jan 25, 2009 at 01:49, Miklos Vajna <vmiklos@frugalware.org> wrote:
> On Sat, Jan 24, 2009 at 01:42:30AM +0100, Sverre Rabbelier <srabbelier@gmail.com> wrote:
>> Which means all protocols actually die?
>
> I think so.
Junio, are your concerns address now, since Miklos confirmed that
transport_get_remote_refs always dies?
--
Cheers,
Sverre Rabbelier
^ permalink raw reply
* Re: [PATCH 04/10] git-shell: allow running git-cvsserver, not just cvs
From: Johannes Schindelin @ 2009-01-25 1:53 UTC (permalink / raw)
To: Matthew Ogilvie; +Cc: git
In-Reply-To: <1232840601-24696-5-git-send-email-mmogilvi_git@miniinfo.net>
Hi,
On Sat, 24 Jan 2009, Matthew Ogilvie wrote:
> diff --git a/shell.c b/shell.c
> index e339369..6ed960f 100644
> --- a/shell.c
> +++ b/shell.c
> @@ -40,6 +40,7 @@ static struct commands {
> } cmd_list[] = {
> { "git-receive-pack", do_generic_cmd },
> { "git-upload-pack", do_generic_cmd },
> + { "git-cvsserver", do_cvs_cmd },
> { "cvs", do_cvs_cmd },
> { NULL },
> };
I do not see any value in this.
Ciao,
Dscho
^ permalink raw reply
* Re: [PATCH 08/10] run test suite without dashed git-commands in PATH
From: Johannes Schindelin @ 2009-01-25 1:59 UTC (permalink / raw)
To: Matthew Ogilvie; +Cc: git
In-Reply-To: <1232840601-24696-9-git-send-email-mmogilvi_git@miniinfo.net>
Hi,
On Sat, 24 Jan 2009, Matthew Ogilvie wrote:
> .gitignore | 1 +
> Makefile | 42 +++++++++++++++++++++++++++++++-----------
> t/test-lib.sh | 14 +++++++++++++-
> test-bin-wrapper.sh | 12 ++++++++++++
> 4 files changed, 57 insertions(+), 12 deletions(-)
> create mode 100644 test-bin-wrapper.sh
I am strongly opposed to a patch this big, just for something as 3rd class
as CVS server faking. We already have a big fallout from all that bending
over for Windows support, and I do not like it at all.
Note: I do not even have to look further than the diffstat to see that it
is wrong.
The point is: if cvsserver wants to pretend that it is in a fake bin where
almost none of the other Git programs are, fine, let's do that _in the
test for cvsserver_.
Let's not fsck up the whole test suite just for one user.
Ciao,
Dscho
^ permalink raw reply
* Re: Heads up: major rebase -i -p rework coming up
From: Johannes Schindelin @ 2009-01-25 2:05 UTC (permalink / raw)
To: Thomas Rast; +Cc: git, Stephen Haberman, spearce, Björn Steinbrink
In-Reply-To: <200901242347.23187.trast@student.ethz.ch>
Hi,
On Sat, 24 Jan 2009, Thomas Rast wrote:
> Johannes Schindelin wrote:
> > Worse, the whole concept of "pick <merge-sha1>" just does not fly well.
> [...]
> > - merge $sha1 [$sha1...] was $sha1 "Merge ..."
> >
> > will merge the given list of commits into the current HEAD, for
> > the user's reference and to keep up-to-date what was rewritten, the
> > original merge is shown after the keyword "was" (which is not a valid
> > SHA-1, luckily)
>
> I really like the underlying idea. I'm not even sure if the current
> semantics are well-defined in all cases; an explicit merge command at
> least makes it very clear what is going on.
>
> However, I think the syntax as proposed above is a bit confusing in the
> usual two-parent merge. I couldn't tell whether
>
> merge A was B
>
> was intended to be read as "the merge of A into the current branch" or
> "the merge with sha1 A" right away, and I doubt I'll be able to tell
> without looking in the (rare) cases I have to invoke rebase -i -p.
>
> I can't really come up with a better replacement for 'was', so how about
>
> merge A # was B "Merge..."
>
> which would make it more clear that the "was B..." has no effect
> whatsoever on the merge's semantics.
Hmm. You're right, that is not really intuitive. How about
merge (B) A # Merge...
instead?
> > A - B - - - E
> > \ /
> > C - D
> >
> > could yield this TODO script:
> >
> > pick A
> > pick C
> > pick D
> > goto A'
> > pick B
> > merge D' was E
>
> I kind of wonder if it would be possible to decorate the TODO with
> 'git log --graph' output, to make it easier to follow the history as
> it is built.
I wondered about that, too, and abandoned it as my common operation is cut
& past lines around. The result would look _utterly_ confusing.
Maybe I should have mentioned that to spare you the brain cycles thinking
about --graph...
Ciao,
Dscho
^ permalink raw reply
* Re: Heads up: major rebase -i -p rework coming up
From: Johannes Schindelin @ 2009-01-25 2:23 UTC (permalink / raw)
To: Junio C Hamano
Cc: Stephan Beyer, git, Stephen Haberman, spearce, Thomas Rast,
Björn Steinbrink
In-Reply-To: <7vzlhgl35z.fsf@gitster.siamese.dyndns.org>
Hi,
On Sat, 24 Jan 2009, Junio C Hamano wrote:
> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
>
> >> - What's with the apostrophe? I seem to remember that you argued it
> >> would be enough to make "A" stand for the original when it is used
> >> for the first time and the second and later use can stand for the
> >> result of the last use (e.g. the "goto A'" above can be simply
> >> spelled as "goto A"), when I suggested to use "mark" in a way
> >> similar to how fast-import language uses it during the sequencer
> >> discussion?
> >>
> >> I am not complaining; I am just being curious why the sudden change
> >> of heart.
> >
> > Very easy explanation. I got convinced by your arguments. Even if I
> > could imagine that I never use the thing without apostrophe, it is
> > good to have an obvious indicator that this is not necessarily the
> > original commit.
>
> Now that does not make much sense to me.
>
> The reason I suggested that 'mark' would give a cleaner semantics was
> because in your earlier design "A" could either stand for the original
> or it could stand for the result of an operation that used "A", and
> there could be more than one operation that uses "A". Explicitly naming
> each result with a mark would give us an unambiguous way to distinguish
> them.
But that is not what rebase -i is about! Either you rewrite a commit, or
you don't. You don't rewrite it multiple times _and_ reference all of the
intermediate steps!
Should you suggest that this is a sane worflow, you would really ask for
trouble.
As it is, "mark" is useless. It would give one and the same thing two
names, one short SHA-1, and one numeric value, and the relationship
between the two -- even if they mean the same! -- would be completely
arbitrary.
> I however do not think you would ever use A twice in the context of
> "rebase -i/-p".
Exactly!
> Cherry-picking the same commit twice to create two copies of them will
> not happen in that context.
Not exactly true, as you could split a patch by
edit abcdefg Patch to be split
edit abcdefg Patch to be split
And removing half of the patch in the first edit (e.g. by "git reset
HEAD^ && git add -e" or something similar).
> While trying to recreate something like this on top of a commit "o", you
> would have to talk about "A" multiple times,...
>
> B---M
> / / \
> ---o---A---C \
> \ \ \
> D---N-------O
>
> ... but even in such a picture, after one "pick A", you would always want
> to refer to the result of the pick, and never the original A.
>
> pick A
> goto A'^
... or goto $ONTO...
> pick D
> merge A' was N
> goto A'
> pick B
> goto A'
> pick C
> merge B' was M
> merge N' was O
>
> So I am inclined to think that "first use refers to the original, second
> and thereafter will refer to the result of the first use" would be a good
> enough semantics for "rebase -i/-p", and you do not need "A" vs "A'" for
> this.
>
> By the way, I think this example shows that your "goto" might need a way
> to refer to the "onto" commit in some way (I just used "A'^" there).
It will use $ONTO.
> On the other hand, if you are aiming to allow users to create (by editing
> the insn file) an arbitrarily different structure like this, starting from
> the same topology:
>
> ---o---B---C---A
> \ \
> A---D-------O
>
> that is, rebasing the upper line of development into one linear sequence
> with different patch order, while rebasing the lower line into another
> linear sequence by rebasing D on top of A, you would need to be able to
> refer to the two different results of "using A", and your "A'" notation
> would not help.
>
> pick B
> pick C
> pick A
> goto B'^
> pick A
> pick D
> merge A' was O
>
> The last "merge A' was O" is done while on the result of applying D on top
> of the result of applying A on the lower line, and wants to call the tip
> of the upper line by referring it as "the result of applying A".
>
> But there are two results from applying A, and I do not think you can
> avoid 'mark', even though you for some reason seem to hate it.
You can, by doing the sane thing and first apply one strand of the two
branches, then going back and applying the other strand. You would not
even once need "goto A'".
> If this kind of transformation is outside the scope of your redesign
> (which I think is a sensible design decision), I do not see why you
> would need "A vs A'".
>
> You either need the full power of 'mark', or "A is original until it is
> used, and then the one and only one result once it is used,"; nothing in
> between like "A vs A'" would make much sense.
Your example seems a little bit constructed to the purpose of showing the
shortcomings of the A' notation.
But it has a shortcoming in and of its own: if you want to apply A for
both branches, it would make a metric ton more sense to apply A before
branching:
---o---A---B---C
\ \
D-------O
Besides, if you would concoct a real obscure situation where you really
needed to apply one and the same patch twice, _and_ refer to both "A'"
(something like
---o---B---A---C----H
\ \ / /
\ E /
\ /
D---A---F
\ /
G
Then you could still do the part B...C first (with the first version of
A'), then D...F (with the second version of A') and be done with it.
Unless you would want anything like
C---A---B
/
---A
which is ugly beyond belief IMO, but in which case you could _still_ do it
with an "edit C; merge A' was B" where you just git cherry-pick A.
So it is possible, even if it needs trickery, which is okay IMHO as this
is not the common case. And I want to optimize for the common case.
Ciao,
Dscho
^ permalink raw reply
* Re: Heads up: major rebase -i -p rework coming up
From: Johannes Schindelin @ 2009-01-25 2:25 UTC (permalink / raw)
To: Thomas Rast; +Cc: git, Stephen Haberman, spearce, Björn Steinbrink
In-Reply-To: <alpine.DEB.1.00.0901250303150.14855@racer>
Hi,
On Sun, 25 Jan 2009, Johannes Schindelin wrote:
> On Sat, 24 Jan 2009, Thomas Rast wrote:
>
> > Johannes Schindelin wrote:
> > > Worse, the whole concept of "pick <merge-sha1>" just does not fly well.
> > [...]
> > > - merge $sha1 [$sha1...] was $sha1 "Merge ..."
> > >
> > > will merge the given list of commits into the current HEAD, for
> > > the user's reference and to keep up-to-date what was rewritten, the
> > > original merge is shown after the keyword "was" (which is not a
> > > valid SHA-1, luckily)
> >
> > I really like the underlying idea. I'm not even sure if the current
> > semantics are well-defined in all cases; an explicit merge command at
> > least makes it very clear what is going on.
> >
> > However, I think the syntax as proposed above is a bit confusing in
> > the usual two-parent merge. I couldn't tell whether
> >
> > merge A was B
> >
> > was intended to be read as "the merge of A into the current branch" or
> > "the merge with sha1 A" right away, and I doubt I'll be able to tell
> > without looking in the (rare) cases I have to invoke rebase -i -p.
> >
> > I can't really come up with a better replacement for 'was', so how
> > about
> >
> > merge A # was B "Merge..."
> >
> > which would make it more clear that the "was B..." has no effect
> > whatsoever on the merge's semantics.
>
> Hmm. You're right, that is not really intuitive. How about
>
> merge (B) A # Merge...
>
> instead?
Or even better:
merge B parent A' # Merge...
?
Ciao,
Dscho
^ permalink raw reply
* Re: [PATCH 0/2] Add submodule-support to git archive
From: Nanako Shiraishi @ 2009-01-25 4:53 UTC (permalink / raw)
To: Lars Hjemli; +Cc: Junio C Hamano, Johannes Schindelin, git
In-Reply-To: <1232844726-14902-1-git-send-email-hjemli@gmail.com>
Quoting Lars Hjemli <hjemli@gmail.com>:
> This is a cleaned up version of my previous patches which allows git archive
> to include submodule content in the archive output.
>
> The main difference between this series and the previous ones is that the
> behaviour of `git archive --submodules` are now predictable; the content
> included from submodules is defined by the gitlink entries found when
> traversing the <tree-ish> specified on the command line, and the set of
> submodules to include are defined by specifying either `--submodules=all` or
> `--submodules=checkedout` (which is the default mode of operation, i.e. what
> you get by only specifying `--submodules`).
I wanted to try this because I use submodules in a repository at my work, but your patches conflicted a lot with your previous series of patches that are already in the next branch of Junio's. What would I do to try this new series? Fork a branch from Junio's master branch, apply your new patches, and merge the result to Junio's next?
--
Nanako Shiraishi
http://ivory.ap.teacup.com/nanako3/
^ permalink raw reply
* What's cooking in git.git (Jan 2009, #06; Sat, 24)
From: Junio C Hamano @ 2009-01-25 5:00 UTC (permalink / raw)
To: git
Here are the topics that have been cooking. Commits prefixed with '-' are
only in 'pu' while commits prefixed with '+' are in 'next'. The ones
marked with '.' do not appear in any of the branches, but I am still
holding onto them.
The topics list the commits in reverse chronological order. The topics
meant to be merged to the maintenance series have "maint-" in their names.
[jc: This message was actually prepared last night and reports the state
as of 23 hours ago, but then I got sick and I didn't manage to send it
out. I wasn't productive today, so it unfortunately reflects the current
status as well.]
----------------------------------------------------------------
[New Topics]
* jg/mergetool (Sat Jan 24 00:12:45 2009 +0100) 1 commit
- [wait for an ack from ted] mergetool: Don't repeat merge tool
candidates
* cb/mergetool (Wed Jan 21 22:57:48 2009 +0000) 1 commit
- [wait for ack from ted] mergetool: respect autocrlf by using
checkout-index
* jc/commit-assume-also-during-merge (Thu Jan 22 22:21:49 2009 -0800) 3 commits
- git commit: pathspec without -i/-o implies -i semantics during a
merge
- builtin-commit: shorten eye-sore overlong lines
- Add "partial commit" tests during a conflicted merge
This is only meant as a weatherballoon to help facilitate discussion.
* sr/clone-empty (Fri Jan 23 01:07:32 2009 +0100) 1 commit
+ Allow cloning an empty repository
At last ;-) This is a reasonable thing to do, and should be fast tracked
to 'master'.
* cc/replace (Fri Jan 23 10:07:46 2009 +0100) 7 commits
- environment: add global variable to disable replacement
- mktag: call "check_sha1_signature" with the replacement sha1
- replace_object: add a test case
- object: call "check_sha1_signature" with the replacement sha1
- sha1_file: add a "read_sha1_file_repl" function
- replace_object: add mechanism to replace objects found in
"refs/replace/"
- refs: add a "for_each_replace_ref" function
----------------------------------------------------------------
[Stalled and may need help and prodding to go forward]
* jc/blame (Wed Jun 4 22:58:40 2008 -0700) 2 commits
+ blame: show "previous" information in --porcelain/--incremental
format
+ git-blame: refactor code to emit "porcelain format" output
This gives Porcelains (like gitweb) the information on the commit _before_
the one that the final blame is laid on, which should save them one
rev-parse to dig further. The line number in the "previous" information
may need refining, and sanity checking code for reference counting may
need to be resurrected before this can move forward.
* db/foreign-scm (Sun Jan 11 15:12:10 2009 -0500) 3 commits
- Support fetching from foreign VCSes
- Add specification of git-vcs helpers
- Add "vcs" config option in remotes
The "spec" did not seem quite well cooked yet, but in the longer term I
think something like this to allow interoperating with other SCMs as if
the other end is a native git repository is a very worthy goal.
----------------------------------------------------------------
[Reverted]
* mh/unify-color (Fri Jan 23 01:25:23 2009 -0800) 3 commits
? Revert previous two commits
? move the color variables to color.c
? handle color.ui at a central place
This broke git-format-patch badly.
----------------------------------------------------------------
[Actively cooking]
* js/valgrind (Wed Jan 21 02:36:40 2009 +0100) 2 commits
- valgrind: ignore ldso errors
- Add valgrind support in test scripts
Dscho seems to have some updates out of discussion with Peff, which is not
queued here.
* sp/runtime-prefix (Sun Jan 18 13:00:15 2009 +0100) 7 commits
- Windows: Revert to default paths and convert them by
RUNTIME_PREFIX
- Compute prefix at runtime if RUNTIME_PREFIX is set
- Modify setup_path() to only add git_exec_path() to PATH
- Add calls to git_extract_argv0_path() in programs that call
git_config_*
- git_extract_argv0_path(): Move check for valid argv0 from caller
to callee
- Refactor git_set_argv0_path() to git_extract_argv0_path()
- Move computation of absolute paths from Makefile to runtime (in
preparation for RUNTIME_PREFIX)
We should move this to 'next' soon with J6t's blessing.
* lh/submodule-tree-traversal (Mon Jan 12 00:45:55 2009 +0100) 3 commits
+ builtin-ls-tree: enable traversal of submodules
+ archive.c: enable traversal of submodules
+ tree.c: add support for traversal of submodules
There were a few updates posted, which I haven't picked up.
* jk/signal-cleanup (Thu Jan 22 01:03:28 2009 -0500) 5 commits
- pager: do wait_for_pager on signal death
- refactor signal handling for cleanup functions
- chain kill signals for cleanup functions
- diff: refactor tempfile cleanup handling
- Windows: Fix signal numbers
Ready for 'next', but not tonight (yet).
* ks/maint-mailinfo-folded (Tue Jan 13 01:21:04 2009 +0300) 5 commits
- mailinfo: tests for RFC2047 examples
- mailinfo: add explicit test for mails like '<a.u.thor@example.com>
(A U Thor)'
- mailinfo: more smarter removal of rfc822 comments from 'From'
+ mailinfo: 'From:' header should be unfold as well
+ mailinfo: correctly handle multiline 'Subject:' header
As far as I can see, the only remaining thing is a minor fix-up in the
"comment removal" one before we can move this fully to 'next'.
* js/notes (Tue Jan 13 20:57:16 2009 +0100) 6 commits
+ git-notes: fix printing of multi-line notes
+ notes: fix core.notesRef documentation
+ Add an expensive test for git-notes
+ Speed up git notes lookup
+ Add a script to edit/inspect notes
+ Introduce commit notes
It would be nice to hear a real world success story using the notes
mechanism; Dscho says he also wants to make sure the current choice
of the structure scales well before casting it in stone.
* sc/gitweb-category (Fri Dec 12 00:45:12 2008 +0100) 3 commits
- gitweb: Optional grouping of projects by category
- gitweb: Split git_project_list_body in two functions
- gitweb: Modularized git_get_project_description to be more generic
Design discussion between Jakub and Sebastien continues.
----------------------------------------------------------------
[Graduated to "master"]
* js/patience-diff (Thu Jan 1 17:39:37 2009 +0100) 3 commits
+ bash completions: Add the --patience option
+ Introduce the diff option '--patience'
+ Implement the patience diff algorithm
----------------------------------------------------------------
[Will merge to "master" soon]
* kb/lstat-cache (Sun Jan 18 16:14:54 2009 +0100) 5 commits
+ lstat_cache(): introduce clear_lstat_cache() function
+ lstat_cache(): introduce invalidate_lstat_cache() function
+ lstat_cache(): introduce has_dirs_only_path() function
+ lstat_cache(): introduce has_symlink_or_noent_leading_path()
function
+ lstat_cache(): more cache effective symlink/directory detection
* tr/previous-branch (Wed Jan 21 00:37:38 2009 -0800) 10 commits
+ Simplify parsing branch switching events in reflog
+ Introduce for_each_recent_reflog_ent().
+ interpret_nth_last_branch(): plug small memleak
+ Fix reflog parsing for a malformed branch switching entry
+ Fix parsing of @{-1}@{1}
+ interpret_nth_last_branch(): avoid traversing the reflog twice
+ checkout: implement "-" abbreviation, add docs and tests
+ sha1_name: support @{-N} syntax in get_sha1()
+ sha1_name: tweak @{-N} lookup
+ checkout: implement "@{-N}" shortcut name for N-th last branch
* js/maint-all-implies-HEAD (Sat Jan 17 22:27:08 2009 -0800) 2 commits
+ bundle: allow the same ref to be given more than once
+ revision walker: include a detached HEAD in --all
* cb/add-pathspec (Wed Jan 14 15:54:35 2009 +0100) 2 commits
+ remove pathspec_match, use match_pathspec instead
+ clean up pathspec matching
* js/diff-color-words (Tue Jan 20 22:59:54 2009 -0600) 9 commits
+ Change the spelling of "wordregex".
+ color-words: Support diff.wordregex config option
+ color-words: make regex configurable via attributes
+ color-words: expand docs with precise semantics
+ color-words: enable REG_NEWLINE to help user
+ color-words: take an optional regular expression describing words
+ color-words: change algorithm to allow for 0-character word
boundaries
+ color-words: refactor word splitting and use ALLOC_GROW()
+ Add color_fwrite_lines(), a function coloring each line
individually
----------------------------------------------------------------
[On Hold]
* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 1 commit
. diff: enable "too large a rename" warning when -M/-C is explicitly
asked for
* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits
. git-am --forge: add Signed-off-by: line for the author
. git-am: clean-up Signed-off-by: lines
. stripspace: add --log-clean option to clean up signed-off-by:
lines
. stripspace: use parse_options()
. Add "git am -s" test
. git-am: refactor code to add signed-off-by line for the committer
* jc/post-simplify (Fri Aug 15 01:34:51 2008 -0700) 2 commits
. revision --simplify-merges: incremental simplification
. revision --simplify-merges: prepare for incremental simplification
* jk/valgrind (Thu Oct 23 04:30:45 2008 +0000) 2 commits
. valgrind: ignore ldso errors
. add valgrind support in test scripts
* wp/add-patch-find (Thu Nov 27 04:08:03 2008 +0000) 3 commits
. In add --patch, Handle K,k,J,j slightly more gracefully.
. Add / command in add --patch
. git-add -i/-p: Change prompt separater from slash to comma
^ permalink raw reply
* What's in git.git (Jan 2009, #03; Sat, 24)
From: Junio C Hamano @ 2009-01-25 5:01 UTC (permalink / raw)
To: git
* The 'maint' branch has these fixes since the last announcement.
Anders Melchiorsen (4):
Documentation: git push repository can also be a remote
Documentation: remove a redundant elaboration
Documentation: mention branches rather than heads
Documentation: avoid using undefined parameters
Boyd Stephen Smith Jr (1):
Fix Documentation for git-describe
Clemens Buchacher (3):
unpack-trees: handle failure in verify_absent
unpack-trees: fix path search bug in verify_absent
unpack-trees: remove redundant path search in verify_absent
Johannes Schindelin (3):
bisect view: call gitk if Cygwin's SESSIONNAME variable is set
git add: do not add files from a submodule
Rename diff.suppress-blank-empty to diff.suppressBlankEmpty
Junio C Hamano (1):
format-patch: show patch text for the root commit
Lars Noschinski (1):
shell: Document that 'cvs server' is a valid command
Paul Jarc (1):
configure clobbers LDFLAGS
Philippe Bruhat (1):
Git.pm: correctly handle directory name that evaluates to "false"
René Scharfe (1):
shortlog: handle multi-line subjects like log --pretty=oneline et. al. do
Thomas Rast (3):
diff: accept -- when using --no-index
diff --no-index: test for pager after option parsing
diff --no-index -q: fix endless loop
* The 'master' branch has these since the last announcement
in addition to the above.
Arjen Laarhoven (1):
t/t4202-log.sh: Add testcases
Björn Steinbrink (1):
Rename detection: Avoid repeated filespec population
Brandon Casey (1):
Makefile: use shell for-loop rather than Make's foreach loop during
install
Jeff King (2):
color: make it easier for non-config to parse color specs
expand --pretty=format color options
Johannes Schindelin (3):
Implement the patience diff algorithm
Introduce the diff option '--patience'
bash completions: Add the --patience option
Jonas Flodén (1):
git-am: Make it easier to see which patch failed
Junio C Hamano (4):
git-am: add --directory=<dir> option
Teach format-patch to handle output directory relative to cwd
git-am: fix shell quoting
git-am: re-fix the diag message printing
Keith Cascio (2):
test more combinations of ignore-whitespace options to diff
Fix combined use of whitespace ignore options to diff
Linus Torvalds (1):
Wrap inflate and other zlib routines for better error reporting
Markus Heidelberg (4):
contrib/difftool: change trap condition from SIGINT to INT
contrib/difftool: remove distracting 'echo' in the SIGINT handler
use uppercase POSIX compliant signals for the 'trap' command
bash completion: add 'rename' subcommand to git-remote
Ralf Wildenhues (1):
Fix naming scheme for configure cache variables.
Ray Chuan (1):
http-push: refactor lock-related headers creation for curl requests
René Scharfe (5):
Add ctype test
Reformat ctype.c
Change NUL char handling of isspecial()
Add is_regex_special()
Optimize color_parse_mem
SZEDER Gábor (1):
Fix gitdir detection when in subdir of gitdir
Santi Béjar (2):
commit: more compact summary and without extra quotes
tutorial-2: Update with the new "git commit" ouput
Stephan Beyer (5):
checkout: don't crash on file checkout before running post-checkout hook
Move run_hook() from builtin-commit.c into run-command.c (libgit)
api-run-command.txt: talk about run_hook()
run_hook(): check the executability of the hook before filling argv
run_hook(): allow more than 9 hook arguments
Thomas Rast (2):
bash completion: move pickaxe options to log
bash completion: refactor diff options
martin f. krafft (1):
git-am: implement --reject option passed to git-apply
^ permalink raw reply
* Re: [PATCH] Allow cloning an empty repository
From: Junio C Hamano @ 2009-01-25 5:05 UTC (permalink / raw)
To: Sverre Rabbelier; +Cc: Johannes Schindelin, Git Mailinglist, Miklos Vajna
In-Reply-To: <bd6139dc0901241655n66f75a8fn8450b774809fa8e7@mail.gmail.com>
Sverre Rabbelier <srabbelier@gmail.com> writes:
> On Sun, Jan 25, 2009 at 01:49, Miklos Vajna <vmiklos@frugalware.org> wrote:
>> On Sat, Jan 24, 2009 at 01:42:30AM +0100, Sverre Rabbelier <srabbelier@gmail.com> wrote:
>>> Which means all protocols actually die?
>>
>> I think so.
>
> Junio, are your concerns address now, since Miklos confirmed that
> transport_get_remote_refs always dies?
Yeah, it is on 'next' and I've pushed the results out last night, but I
got sick and didn't manage to send out "What's cooking".
^ permalink raw reply
* [PATCH] diff-options.txt: Fix asciidoc markup issue
From: Teemu Likonen @ 2009-01-25 5:18 UTC (permalink / raw)
To: gitster; +Cc: git, Johannes.Schindelin
Must be "--patience::", not "--patience:".
---
Documentation/diff-options.txt | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/Documentation/diff-options.txt b/Documentation/diff-options.txt
index 3816a83..813a7b1 100644
--- a/Documentation/diff-options.txt
+++ b/Documentation/diff-options.txt
@@ -36,7 +36,7 @@ endif::git-format-patch[]
--patch-with-raw::
Synonym for "-p --raw".
---patience:
+--patience::
Generate a diff using the "patience diff" algorithm.
--stat[=width[,name-width]]::
--
1.6.1.295.g75c4eae
^ permalink raw reply related
* Re: [PATCH] mergetool merge/skip/abort
From: Junio C Hamano @ 2009-01-25 5:20 UTC (permalink / raw)
To: Nanako Shiraishi; +Cc: Caleb Cushing, Charles Bailey, git
In-Reply-To: <20090125064539.6117@nanako3.lavabit.com>
Nanako Shiraishi <nanako3@lavabit.com> writes:
> 2. patterns in case command start at the same column as case and esac,
> and ";;" is at the same column as any other commands.
>
> case "$ans" in
> [mM]*|"")
> break
> ;;
> [Ss]*)
> ...
> esac
I generally prefer the above style, but mergetool is not mine, and the
predominant style in it is:
case xyzzy in
frotz)
do this
;;
nitfol)
do that
;;
esac
Namely, case arms' labels are indented by 4 spaces from case/esac, and the
commands in each case arm are further indented by 4 spaces (including the
terminating double-semicolon).
It is always preferable to match the _local_ convention. I'd expect a new
script added to git suite to match my preference (the one I showed you in
my comments to you that is used in git-am, which is what you suggested
above), but I'd expect a modification to mergetool to match the style
mergetool already uses.
IOW, Caleb's indentation style is fine. The placement of double-semicolon
is not, though.
^ permalink raw reply
* [PATCH] http-push: refactor request url creation
From: Ray Chuan @ 2009-01-25 6:08 UTC (permalink / raw)
To: git, Johannes Schindelin
Currently, functions that deal with objects on the remote repository
have to allocate and do strcpys to generate the URL.
This patch saves them this trouble, by providing a function that
returns a URL: either the object's 2-digit hex directory (eg.
/objects/a1/) or the complete object location (eg. /objects/a1/b2).
Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
---
* renamed only_two_digit_postfix in original patch to only_two_digit_prefix
* rebased and generated on master (5dc1308)
http-push.c | 58 +++++++++++++++++++---------------------------------------
1 files changed, 19 insertions(+), 39 deletions(-)
diff --git a/http-push.c b/http-push.c
index eca4a8e..27825f2 100644
--- a/http-push.c
+++ b/http-push.c
@@ -208,6 +208,16 @@ static struct curl_slist
*get_dav_token_headers(struct remote_lock *lock, enum d
return dav_headers;
}
+static char *get_remote_object_url(const char *url, const char *hex,
int only_two_digit_prefix) {
+ struct strbuf buf = STRBUF_INIT;
+
+ strbuf_addf(&buf, "%sobjects/%.*s/", url, 2, hex);
+ if(!only_two_digit_prefix)
+ strbuf_addf(&buf, "%s", hex+2);
+
+ return strbuf_detach(&buf, NULL);
+}
+
static void finish_request(struct transfer_request *request);
static void release_request(struct transfer_request *request);
@@ -253,8 +263,6 @@ static void start_fetch_loose(struct
transfer_request *request)
char *hex = sha1_to_hex(request->obj->sha1);
char *filename;
char prevfile[PATH_MAX];
- char *url;
- char *posn;
int prevlocal;
unsigned char prev_buf[PREV_BUF_SIZE];
ssize_t prev_read = 0;
@@ -304,17 +312,7 @@ static void start_fetch_loose(struct
transfer_request *request)
git_SHA1_Init(&request->c);
- url = xmalloc(strlen(remote->url) + 50);
- request->url = xmalloc(strlen(remote->url) + 50);
- strcpy(url, remote->url);
- posn = url + strlen(remote->url);
- strcpy(posn, "objects/");
- posn += 8;
- memcpy(posn, hex, 2);
- posn += 2;
- *(posn++) = '/';
- strcpy(posn, hex + 2);
- strcpy(request->url, url);
+ request->url = get_remote_object_url(remote->url, hex, 0);
/* If a previous temp file is present, process what was already
fetched. */
@@ -358,7 +356,7 @@ static void start_fetch_loose(struct
transfer_request *request)
curl_easy_setopt(slot->curl, CURLOPT_FILE, request);
curl_easy_setopt(slot->curl, CURLOPT_WRITEFUNCTION, fwrite_sha1_file);
curl_easy_setopt(slot->curl, CURLOPT_ERRORBUFFER, request->errorstr);
- curl_easy_setopt(slot->curl, CURLOPT_URL, url);
+ curl_easy_setopt(slot->curl, CURLOPT_URL, request->url);
curl_easy_setopt(slot->curl, CURLOPT_HTTPHEADER, no_pragma_header);
/* If we have successfully processed data from a previous fetch
@@ -387,16 +385,8 @@ static void start_mkcol(struct transfer_request *request)
{
char *hex = sha1_to_hex(request->obj->sha1);
struct active_request_slot *slot;
- char *posn;
- request->url = xmalloc(strlen(remote->url) + 13);
- strcpy(request->url, remote->url);
- posn = request->url + strlen(remote->url);
- strcpy(posn, "objects/");
- posn += 8;
- memcpy(posn, hex, 2);
- posn += 2;
- strcpy(posn, "/");
+ request->url = get_remote_object_url(remote->url, hex, 1);
slot = get_active_slot();
slot->callback_func = process_response;
@@ -511,7 +501,7 @@ static void start_put(struct transfer_request *request)
{
char *hex = sha1_to_hex(request->obj->sha1);
struct active_request_slot *slot;
- char *posn;
+ struct strbuf url_buf = STRBUF_INIT;
enum object_type type;
char hdr[50];
void *unpacked;
@@ -550,21 +540,11 @@ static void start_put(struct transfer_request *request)
request->buffer.buf.len = stream.total_out;
- request->url = xmalloc(strlen(remote->url) +
- strlen(request->lock->token) + 51);
- strcpy(request->url, remote->url);
- posn = request->url + strlen(remote->url);
- strcpy(posn, "objects/");
- posn += 8;
- memcpy(posn, hex, 2);
- posn += 2;
- *(posn++) = '/';
- strcpy(posn, hex + 2);
- request->dest = xmalloc(strlen(request->url) + 14);
- sprintf(request->dest, "Destination: %s", request->url);
- posn += 38;
- *(posn++) = '_';
- strcpy(posn, request->lock->token);
+ strbuf_addf(&url_buf, "Destination: %s",
get_remote_object_url(remote->url, hex, 0));
+ request->dest = strbuf_detach(&url_buf, NULL);
+
+ strbuf_addf(&url_buf, "%s_%s", get_remote_object_url(remote->url,
hex, 0), request->lock->token);
+ request->url = strbuf_detach(&url_buf, NULL);
slot = get_active_slot();
slot->callback_func = process_response;
--
1.6.0.4
^ permalink raw reply related
* [PATCH] git-svn: add --ignore-paths option for fetching
From: Vitaly "_Vi" Shukela @ 2009-01-25 6:27 UTC (permalink / raw)
To: git, normalperson; +Cc: Vitaly "_Vi" Shukela
Signed-off-by: Vitaly "_Vi" Shukela <public_vi@tut.by>
---
Documentation/git-svn.txt | 4 ++++
git-svn.perl | 25 +++++++++++++++++++++++--
2 files changed, 27 insertions(+), 2 deletions(-)
diff --git a/Documentation/git-svn.txt b/Documentation/git-svn.txt
index 63d2f5e..4aeb88b 100644
--- a/Documentation/git-svn.txt
+++ b/Documentation/git-svn.txt
@@ -96,6 +96,10 @@ COMMANDS
Store Git commit times in the local timezone instead of UTC. This
makes 'git-log' (even without --date=local) show the same times
that `svn log` would in the local timezone.
+--ignore-paths=<regex>;;
+ This allows one to specify regular expression that will
+ cause skipping of all matching paths from checkout from SVN.
+ Example: --ignore-paths='^doc'
This doesn't interfere with interoperating with the Subversion
repository you cloned from, but if you wish for your local Git
diff --git a/git-svn.perl b/git-svn.perl
index d4cb538..4909b23 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -70,7 +70,8 @@ my ($_stdin, $_help, $_edit,
$Git::SVN::_follow_parent = 1;
my %remote_opts = ( 'username=s' => \$Git::SVN::Prompt::_username,
'config-dir=s' => \$Git::SVN::Ra::config_dir,
- 'no-auth-cache' => \$Git::SVN::Prompt::_no_auth_cache );
+ 'no-auth-cache' => \$Git::SVN::Prompt::_no_auth_cache,
+ 'ignore-paths=s' => \$SVN::Git::Fetcher::ignoreRegex );
my %fc_opts = ( 'follow-parent|follow!' => \$Git::SVN::_follow_parent,
'authors-file|A=s' => \$_authors,
'repack:i' => \$Git::SVN::_repack,
@@ -3245,6 +3246,15 @@ use warnings;
use Carp qw/croak/;
use File::Temp qw/tempfile/;
use IO::File qw//;
+use vars qw/ $ignoreRegex/;
+
+# 0 -- don't ignore, 1 -- ignore
+sub isPathIgnored($) {
+ return 0 unless defined($ignoreRegex);
+ my $path = shift;
+ return 1 if $path =~ m!^$ignoreRegex!o;
+ return 0;
+}
# file baton members: path, mode_a, mode_b, pool, fh, blob, base
sub new {
@@ -3323,6 +3333,7 @@ sub git_path {
sub delete_entry {
my ($self, $path, $rev, $pb) = @_;
return undef if in_dot_git($path);
+ return undef if isPathIgnored($path);
my $gpath = $self->git_path($path);
return undef if ($gpath eq '');
@@ -3353,6 +3364,7 @@ sub open_file {
my ($mode, $blob);
goto out if in_dot_git($path);
+ goto out if isPathIgnored($path);
my $gpath = $self->git_path($path);
($mode, $blob) = (command('ls-tree', $self->{c}, '--', $gpath)
@@ -3372,11 +3384,14 @@ sub add_file {
my ($self, $path, $pb, $cp_path, $cp_rev) = @_;
my $mode;
+ goto out if isPathIgnored($path);
+
if (!in_dot_git($path)) {
my ($dir, $file) = ($path =~ m#^(.*?)/?([^/]+)$#);
delete $self->{empty}->{$dir};
$mode = '100644';
}
+out:
{ path => $path, mode_a => $mode, mode_b => $mode,
pool => SVN::Pool->new, action => 'A' };
}
@@ -3384,6 +3399,7 @@ sub add_file {
sub add_directory {
my ($self, $path, $cp_path, $cp_rev) = @_;
goto out if in_dot_git($path);
+ goto out if isPathIgnored($path);
my $gpath = $self->git_path($path);
if ($gpath eq '') {
my ($ls, $ctx) = command_output_pipe(qw/ls-tree
@@ -3408,6 +3424,7 @@ out:
sub change_dir_prop {
my ($self, $db, $prop, $value) = @_;
return undef if in_dot_git($db->{path});
+ return undef if isPathIgnored($db->{path});
$self->{dir_prop}->{$db->{path}} ||= {};
$self->{dir_prop}->{$db->{path}}->{$prop} = $value;
undef;
@@ -3416,6 +3433,7 @@ sub change_dir_prop {
sub absent_directory {
my ($self, $path, $pb) = @_;
return undef if in_dot_git($pb->{path});
+ return undef if isPathIgnored($path);
$self->{absent_dir}->{$pb->{path}} ||= [];
push @{$self->{absent_dir}->{$pb->{path}}}, $path;
undef;
@@ -3424,6 +3442,7 @@ sub absent_directory {
sub absent_file {
my ($self, $path, $pb) = @_;
return undef if in_dot_git($pb->{path});
+ return undef if isPathIgnored($path);
$self->{absent_file}->{$pb->{path}} ||= [];
push @{$self->{absent_file}->{$pb->{path}}}, $path;
undef;
@@ -3432,6 +3451,7 @@ sub absent_file {
sub change_file_prop {
my ($self, $fb, $prop, $value) = @_;
return undef if in_dot_git($fb->{path});
+ return undef if isPathIgnored($fb->{path});
if ($prop eq 'svn:executable') {
if ($fb->{mode_b} != 120000) {
$fb->{mode_b} = defined $value ? 100755 : 100644;
@@ -3448,6 +3468,7 @@ sub change_file_prop {
sub apply_textdelta {
my ($self, $fb, $exp) = @_;
return undef if (in_dot_git($fb->{path}));
+ return undef if isPathIgnored($fb->{path});
my $fh = $::_repository->temp_acquire('svn_delta');
# $fh gets auto-closed() by SVN::TxDelta::apply(),
# (but $base does not,) so dup() it for reading in close_file
@@ -3495,7 +3516,7 @@ sub apply_textdelta {
sub close_file {
my ($self, $fb, $exp) = @_;
return undef if (in_dot_git($fb->{path}));
-
+ return undef if isPathIgnored($fb->{path});
my $hash;
my $path = $self->git_path($fb->{path});
if (my $fh = $fb->{fh}) {
--
1.5.6.5
^ permalink raw reply related
* Re: [PATCH 1/2] user-manual: Simplify the user configuration.
From: Kyle Moffett @ 2009-01-25 7:32 UTC (permalink / raw)
To: Hannu Koivisto; +Cc: Felipe Contreras, Junio C Hamano, git, Johannes Schindelin
In-Reply-To: <83wscndv57.fsf@kalahari.s2.org>
On Thu, Jan 22, 2009 at 1:59 PM, Hannu Koivisto <azure@iki.fi> wrote:
> In any case, what Cygwin git does should be expected by Cygwin
> users. If msysgit wanted to be a really native Windows application
> and store the configuration where Microsoft thinks it should be
> stored, it probably shouldn't store the config under "home
> directory" to begin with (I'm guessing that's what it does) but
> under %USERPROFILE\Application Data\Git (...FILE\Local
> Settings\... in case non-roaming storage is wanted). And in that
> case the manual might be misleading for msysgit users. See
> e.g. <http://msdn.microsoft.com/en-us/library/ms995853.aspx>.
Actually, if msysgit really wanted to be a "native" windows program,
it would use the good-old brain-damaged method of storing
everything-and-the-kitchen-sink in the registry, including the
locations and reflogs for every repository you have ever examined.
Admittedly the collection of 150+ dotfiles in my Linux homedir looks
relatively similar to parts of the windows registry at times...
Cheers,
Kyle Moffett
^ permalink raw reply
* Re: [PATCH 0/2] Add submodule-support to git archive
From: Lars Hjemli @ 2009-01-25 8:18 UTC (permalink / raw)
To: Nanako Shiraishi; +Cc: Junio C Hamano, Johannes Schindelin, git
In-Reply-To: <20090125135340.6117@nanako3.lavabit.com>
On Sun, Jan 25, 2009 at 05:53, Nanako Shiraishi <nanako3@lavabit.com> wrote:
> What would I do to try this new series? Fork a branch from Junio's master branch,
> apply your new patches, and merge the result to Junio's next?
Yes, that sounds right (btw: the series is buildt on top of 5dc1308562
(Merge branch 'js/patience-diff') and can be pulled from
git://hjemli.net/pub/git/git lh/traverse-gitlinks).
But before merging with 'next', you'll need to `git revert -m 1 bdf31cbc00`.
--
larsh
^ permalink raw reply
* Re: CR codes from git commands
From: Boyd Stephen Smith Jr. @ 2009-01-25 9:19 UTC (permalink / raw)
To: Brent Goodrick; +Cc: git
In-Reply-To: <18811.32772.728276.923430@hungover.brentg.com>
[-- Attachment #1: Type: text/plain, Size: 683 bytes --]
On Saturday 24 January 2009, Brent Goodrick <bgoodr@gmail.com> wrote
about 'Re: CR codes from git commands':
>While I'm at it, what is the standard procedure for submitting git
>patches for review once I've cooked up and validated it on my end? I'm
>guessing posting the patch into this mailing list is part of the
>answer to that question.
If you've got a patch, I assume you've got a checkout. Look in
Documentation/SubmittingPatches.
--
Boyd Stephen Smith Jr. ,= ,-_-. =.
bss@iguanasuicide.net ((_/)o o(\_))
ICQ: 514984 YM/AIM: DaTwinkDaddy `-'(. .)`-'
http://iguanasuicide.net/ \_/
[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 197 bytes --]
^ permalink raw reply
* git-svn: cloning from svn.apache.org
From: Florian Weimer @ 2009-01-25 10:49 UTC (permalink / raw)
To: git
What can be done to speed up cloning from svn.apache.org? It's a
Subversion repository with over 700,000 revisions. Many projects
stored there started their life in some of the later revisions, and
the forward-scanning part of git-svn takes ages.
I wonder if it were faster to search history backwards, starting with
the specified path, similar to what "svn log" does?
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox