mirror of
https://github.com/git/git.git
synced 2026-04-03 21:40:11 +02:00
Merge branch 'master' of git://repo.or.cz/alt-git
This commit is contained in:
@@ -320,6 +320,13 @@ Any other arguments are passed directly to 'git log'
|
||||
directories. The output is suitable for appending to
|
||||
the $GIT_DIR/info/exclude file.
|
||||
|
||||
'mkdirs'::
|
||||
Attempts to recreate empty directories that core git cannot track
|
||||
based on information in $GIT_DIR/svn/<refname>/unhandled.log files.
|
||||
Empty directories are automatically recreated when using
|
||||
"git svn clone" and "git svn rebase", so "mkdirs" is intended
|
||||
for use after commands like "git checkout" or "git reset".
|
||||
|
||||
'commit-diff'::
|
||||
Commits the diff of two tree-ish arguments from the
|
||||
command-line. This command does not rely on being inside an `git svn
|
||||
@@ -735,6 +742,16 @@ merges you've made. Furthermore, if you merge or pull from a git branch
|
||||
that is a mirror of an SVN branch, 'dcommit' may commit to the wrong
|
||||
branch.
|
||||
|
||||
If you do merge, note the following rule: 'git svn dcommit' will
|
||||
attempt to commit on top of the SVN commit named in
|
||||
------------------------------------------------------------------------
|
||||
git log --grep=^git-svn-id: --first-parent -1
|
||||
------------------------------------------------------------------------
|
||||
You 'must' therefore ensure that the most recent commit of the branch
|
||||
you want to dcommit to is the 'first' parent of the merge. Chaos will
|
||||
ensue otherwise, especially if the first parent is an older commit on
|
||||
the same SVN branch.
|
||||
|
||||
'git clone' does not clone branches under the refs/remotes/ hierarchy or
|
||||
any 'git svn' metadata, or config. So repositories created and managed with
|
||||
using 'git svn' should use 'rsync' for cloning, if cloning is to be done
|
||||
|
||||
@@ -185,7 +185,7 @@ object is. git will tell you that you have a "blob" object (i.e., just a
|
||||
regular file), and you can see the contents with
|
||||
|
||||
----------------
|
||||
$ git cat-file "blob" 557db03
|
||||
$ git cat-file blob 557db03
|
||||
----------------
|
||||
|
||||
which will print out "Hello World". The object `557db03` is nothing
|
||||
@@ -1188,7 +1188,7 @@ $ git show-branch
|
||||
--
|
||||
+ [mybranch] Some work.
|
||||
* [master] Some fun.
|
||||
*+ [mybranch^] New day.
|
||||
*+ [mybranch^] Initial commit
|
||||
------------
|
||||
|
||||
Now we are ready to experiment with the merge by hand.
|
||||
@@ -1204,11 +1204,11 @@ $ mb=$(git merge-base HEAD mybranch)
|
||||
The command writes the commit object name of the common ancestor
|
||||
to the standard output, so we captured its output to a variable,
|
||||
because we will be using it in the next step. By the way, the common
|
||||
ancestor commit is the "New day." commit in this case. You can
|
||||
ancestor commit is the "Initial commit" commit in this case. You can
|
||||
tell it by:
|
||||
|
||||
------------
|
||||
$ git name-rev $mb
|
||||
$ git name-rev --name-only --tags $mb
|
||||
my-first-tag
|
||||
------------
|
||||
|
||||
@@ -1237,8 +1237,8 @@ inspect the index file with this command:
|
||||
------------
|
||||
$ git ls-files --stage
|
||||
100644 7f8b141b65fdcee47321e399a2598a235a032422 0 example
|
||||
100644 263414f423d0e4d70dae8fe53fa34614ff3e2860 1 hello
|
||||
100644 06fa6a24256dc7e560efa5687fa84b51f0263c3a 2 hello
|
||||
100644 557db03de997c86a4a028e1ebd3a1ceb225be238 1 hello
|
||||
100644 ba42a2a96e3027f3333e13ede4ccf4498c3ae942 2 hello
|
||||
100644 cc44c73eb783565da5831b4d820c962954019b69 3 hello
|
||||
------------
|
||||
|
||||
@@ -1253,8 +1253,8 @@ To look at only non-zero stages, use `\--unmerged` flag:
|
||||
|
||||
------------
|
||||
$ git ls-files --unmerged
|
||||
100644 263414f423d0e4d70dae8fe53fa34614ff3e2860 1 hello
|
||||
100644 06fa6a24256dc7e560efa5687fa84b51f0263c3a 2 hello
|
||||
100644 557db03de997c86a4a028e1ebd3a1ceb225be238 1 hello
|
||||
100644 ba42a2a96e3027f3333e13ede4ccf4498c3ae942 2 hello
|
||||
100644 cc44c73eb783565da5831b4d820c962954019b69 3 hello
|
||||
------------
|
||||
|
||||
@@ -1283,8 +1283,8 @@ the working tree.. This can be seen if you run `ls-files
|
||||
------------
|
||||
$ git ls-files --stage
|
||||
100644 7f8b141b65fdcee47321e399a2598a235a032422 0 example
|
||||
100644 263414f423d0e4d70dae8fe53fa34614ff3e2860 1 hello
|
||||
100644 06fa6a24256dc7e560efa5687fa84b51f0263c3a 2 hello
|
||||
100644 557db03de997c86a4a028e1ebd3a1ceb225be238 1 hello
|
||||
100644 ba42a2a96e3027f3333e13ede4ccf4498c3ae942 2 hello
|
||||
100644 cc44c73eb783565da5831b4d820c962954019b69 3 hello
|
||||
------------
|
||||
|
||||
|
||||
8
Makefile
8
Makefile
@@ -358,6 +358,7 @@ EXTRA_PROGRAMS =
|
||||
PROGRAMS += $(EXTRA_PROGRAMS)
|
||||
PROGRAMS += git-fast-import$X
|
||||
PROGRAMS += git-hash-object$X
|
||||
PROGRAMS += git-imap-send$X
|
||||
PROGRAMS += git-index-pack$X
|
||||
PROGRAMS += git-merge-index$X
|
||||
PROGRAMS += git-merge-tree$X
|
||||
@@ -906,7 +907,7 @@ ifdef MSVC
|
||||
GIT_VERSION := $(GIT_VERSION).MSVC
|
||||
pathsep = ;
|
||||
NO_PREAD = YesPlease
|
||||
NO_OPENSSL = YesPlease
|
||||
NEEDS_CRYPTO_WITH_SSL = YesPlease
|
||||
NO_LIBGEN_H = YesPlease
|
||||
NO_SYMLINK_HEAD = YesPlease
|
||||
NO_IPV6 = YesPlease
|
||||
@@ -936,6 +937,7 @@ ifdef MSVC
|
||||
NO_REGEX = YesPlease
|
||||
NO_CURL = YesPlease
|
||||
NO_PTHREADS = YesPlease
|
||||
BLK_SHA1 = YesPlease
|
||||
|
||||
CC = compat/vcbuild/scripts/clink.pl
|
||||
AR = compat/vcbuild/scripts/lib.pl
|
||||
@@ -958,7 +960,7 @@ else
|
||||
ifneq (,$(findstring MINGW,$(uname_S)))
|
||||
pathsep = ;
|
||||
NO_PREAD = YesPlease
|
||||
NO_OPENSSL = YesPlease
|
||||
NEEDS_CRYPTO_WITH_SSL = YesPlease
|
||||
NO_LIBGEN_H = YesPlease
|
||||
NO_SYMLINK_HEAD = YesPlease
|
||||
NO_IPV6 = YesPlease
|
||||
@@ -985,6 +987,7 @@ ifneq (,$(findstring MINGW,$(uname_S)))
|
||||
UNRELIABLE_FSTAT = UnfortunatelyYes
|
||||
OBJECT_CREATION_USES_RENAMES = UnfortunatelyNeedsTo
|
||||
NO_REGEX = YesPlease
|
||||
BLK_SHA1 = YesPlease
|
||||
COMPAT_CFLAGS += -D__USE_MINGW_ACCESS -DNOGDI -Icompat -Icompat/fnmatch
|
||||
COMPAT_CFLAGS += -DSTRIP_EXTENSION=\".exe\"
|
||||
COMPAT_OBJS += compat/mingw.o compat/fnmatch/fnmatch.o compat/winansi.o
|
||||
@@ -1082,7 +1085,6 @@ EXTLIBS += -lz
|
||||
|
||||
ifndef NO_POSIX_ONLY_PROGRAMS
|
||||
PROGRAMS += git-daemon$X
|
||||
PROGRAMS += git-imap-send$X
|
||||
endif
|
||||
ifndef NO_OPENSSL
|
||||
OPENSSL_LIBSSL = -lssl
|
||||
|
||||
@@ -132,7 +132,6 @@ int cmd_upload_archive(int argc, const char **argv, const char *prefix)
|
||||
|
||||
while (1) {
|
||||
struct pollfd pfd[2];
|
||||
ssize_t processed[2] = { 0, 0 };
|
||||
int status;
|
||||
|
||||
pfd[0].fd = fd1[0];
|
||||
@@ -147,15 +146,14 @@ int cmd_upload_archive(int argc, const char **argv, const char *prefix)
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (pfd[0].revents & POLLIN)
|
||||
/* Data stream ready */
|
||||
processed[0] = process_input(pfd[0].fd, 1);
|
||||
if (pfd[1].revents & POLLIN)
|
||||
/* Status stream ready */
|
||||
processed[1] = process_input(pfd[1].fd, 2);
|
||||
/* Always finish to read data when available */
|
||||
if (processed[0] || processed[1])
|
||||
continue;
|
||||
if (process_input(pfd[1].fd, 2))
|
||||
continue;
|
||||
if (pfd[0].revents & POLLIN)
|
||||
/* Data stream ready */
|
||||
if (process_input(pfd[0].fd, 1))
|
||||
continue;
|
||||
|
||||
if (waitpid(writer, &status, 0) < 0)
|
||||
error_clnt("%s", lostchild);
|
||||
|
||||
@@ -124,6 +124,27 @@ static inline int waitpid(pid_t pid, int *status, unsigned options)
|
||||
return -1;
|
||||
}
|
||||
|
||||
#ifndef NO_OPENSSL
|
||||
#include <openssl/ssl.h>
|
||||
static inline int mingw_SSL_set_fd(SSL *ssl, int fd)
|
||||
{
|
||||
return SSL_set_fd(ssl, _get_osfhandle(fd));
|
||||
}
|
||||
#define SSL_set_fd mingw_SSL_set_fd
|
||||
|
||||
static inline int mingw_SSL_set_rfd(SSL *ssl, int fd)
|
||||
{
|
||||
return SSL_set_rfd(ssl, _get_osfhandle(fd));
|
||||
}
|
||||
#define SSL_set_rfd mingw_SSL_set_rfd
|
||||
|
||||
static inline int mingw_SSL_set_wfd(SSL *ssl, int fd)
|
||||
{
|
||||
return SSL_set_wfd(ssl, _get_osfhandle(fd));
|
||||
}
|
||||
#define SSL_set_wfd mingw_SSL_set_wfd
|
||||
#endif
|
||||
|
||||
/*
|
||||
* implementations of missing functions
|
||||
*/
|
||||
|
||||
@@ -29,6 +29,9 @@ while (@ARGV) {
|
||||
push(@args, "zlib.lib");
|
||||
} elsif ("$arg" eq "-liconv") {
|
||||
push(@args, "iconv.lib");
|
||||
} elsif ("$arg" eq "-lcrypto") {
|
||||
push(@args, "libeay32.lib");
|
||||
push(@args, "ssleay32.lib");
|
||||
} elsif ("$arg" =~ /^-L/ && "$arg" ne "-LTCG") {
|
||||
$arg =~ s/^-L/-LIBPATH:/;
|
||||
push(@args, $arg);
|
||||
|
||||
@@ -315,6 +315,9 @@ sub handleLinkLine
|
||||
$appout = shift @parts;
|
||||
} elsif ("$part" eq "-lz") {
|
||||
push(@libs, "zlib.lib");
|
||||
} elsif ("$part" eq "-lcrypto") {
|
||||
push(@libs, "libeay32.lib");
|
||||
push(@libs, "ssleay32.lib");
|
||||
} elsif ($part =~ /^-/) {
|
||||
push(@lflags, $part);
|
||||
} elsif ($part =~ /\.(a|lib)$/) {
|
||||
|
||||
57
git-svn.perl
57
git-svn.perl
@@ -168,6 +168,9 @@ my %cmd = (
|
||||
'Create a .gitignore per svn:ignore',
|
||||
{ 'revision|r=i' => \$_revision
|
||||
} ],
|
||||
'mkdirs' => [ \&cmd_mkdirs ,
|
||||
"recreate empty directories after a checkout",
|
||||
{ 'revision|r=i' => \$_revision } ],
|
||||
'propget' => [ \&cmd_propget,
|
||||
'Print the value of a property on a file or directory',
|
||||
{ 'revision|r=i' => \$_revision } ],
|
||||
@@ -274,7 +277,7 @@ unless ($cmd && $cmd =~ /(?:clone|init|multi-init)$/) {
|
||||
|
||||
my %opts = %{$cmd{$cmd}->[2]} if (defined $cmd);
|
||||
|
||||
read_repo_config(\%opts);
|
||||
read_git_config(\%opts);
|
||||
if ($cmd && ($cmd eq 'log' || $cmd eq 'blame')) {
|
||||
Getopt::Long::Configure('pass_through');
|
||||
}
|
||||
@@ -769,6 +772,7 @@ sub cmd_rebase {
|
||||
$_fetch_all ? $gs->fetch_all : $gs->fetch;
|
||||
}
|
||||
command_noisy(rebase_cmd(), $gs->refname);
|
||||
$gs->mkemptydirs;
|
||||
}
|
||||
|
||||
sub cmd_show_ignore {
|
||||
@@ -830,6 +834,12 @@ sub cmd_create_ignore {
|
||||
});
|
||||
}
|
||||
|
||||
sub cmd_mkdirs {
|
||||
my ($url, $rev, $uuid, $gs) = working_head_info('HEAD');
|
||||
$gs ||= Git::SVN->new;
|
||||
$gs->mkemptydirs($_revision);
|
||||
}
|
||||
|
||||
sub canonicalize_path {
|
||||
my ($path) = @_;
|
||||
my $dot_slash_added = 0;
|
||||
@@ -1196,6 +1206,7 @@ sub post_fetch_checkout {
|
||||
command_noisy(qw/read-tree -m -u -v HEAD HEAD/);
|
||||
print STDERR "Checked out HEAD:\n ",
|
||||
$gs->full_url, " r", $gs->last_rev, "\n";
|
||||
$gs->mkemptydirs($gs->last_rev);
|
||||
}
|
||||
|
||||
sub complete_svn_url {
|
||||
@@ -1390,8 +1401,7 @@ sub load_authors {
|
||||
}
|
||||
|
||||
# convert GetOpt::Long specs for use by git-config
|
||||
sub read_repo_config {
|
||||
return unless -d $ENV{GIT_DIR};
|
||||
sub read_git_config {
|
||||
my $opts = shift;
|
||||
my @config_only;
|
||||
foreach my $o (keys %$opts) {
|
||||
@@ -2725,6 +2735,34 @@ sub do_fetch {
|
||||
$self->make_log_entry($rev, \@parents, $ed);
|
||||
}
|
||||
|
||||
sub mkemptydirs {
|
||||
my ($self, $r) = @_;
|
||||
my %empty_dirs = ();
|
||||
|
||||
open my $fh, '<', "$self->{dir}/unhandled.log" or return;
|
||||
binmode $fh or croak "binmode: $!";
|
||||
while (<$fh>) {
|
||||
if (defined $r && /^r(\d+)$/) {
|
||||
last if $1 > $r;
|
||||
} elsif (/^ \+empty_dir: (.+)$/) {
|
||||
$empty_dirs{$1} = 1;
|
||||
} elsif (/^ \-empty_dir: (.+)$/) {
|
||||
delete $empty_dirs{$1};
|
||||
}
|
||||
}
|
||||
close $fh;
|
||||
foreach my $d (sort keys %empty_dirs) {
|
||||
$d = uri_decode($d);
|
||||
next if -d $d;
|
||||
if (-e _) {
|
||||
warn "$d exists but is not a directory\n";
|
||||
} else {
|
||||
print "creating empty directory: $d\n";
|
||||
mkpath([$d]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub get_untracked {
|
||||
my ($self, $ed) = @_;
|
||||
my @out;
|
||||
@@ -2950,8 +2988,11 @@ sub find_extra_svn_parents {
|
||||
my $bottom_commit =
|
||||
$gs->rev_map_get($bottom, $self->ra_uuid) ||
|
||||
$gs->rev_map_get($bottom+1, $self->ra_uuid);
|
||||
my $top_commit =
|
||||
$gs->rev_map_get($top, $self->ra_uuid);
|
||||
my $top_commit;
|
||||
for (; !$top_commit && $top >= $bottom; --$top) {
|
||||
$top_commit =
|
||||
$gs->rev_map_get($top, $self->ra_uuid);
|
||||
}
|
||||
|
||||
unless ($top_commit and $bottom_commit) {
|
||||
warn "W:unknown path/rev in svn:mergeinfo "
|
||||
@@ -3554,6 +3595,12 @@ sub uri_encode {
|
||||
$f
|
||||
}
|
||||
|
||||
sub uri_decode {
|
||||
my ($f) = @_;
|
||||
$f =~ s#%([0-9a-fA-F]{2})#chr(hex($1))#eg;
|
||||
$f
|
||||
}
|
||||
|
||||
sub remove_username {
|
||||
$_[0] =~ s{^([^:]*://)[^@]+@}{$1};
|
||||
}
|
||||
|
||||
226
imap-send.c
226
imap-send.c
@@ -24,6 +24,7 @@
|
||||
|
||||
#include "cache.h"
|
||||
#include "exec_cmd.h"
|
||||
#include "run-command.h"
|
||||
#ifdef NO_OPENSSL
|
||||
typedef void *SSL;
|
||||
#endif
|
||||
@@ -93,6 +94,7 @@ struct msg_data {
|
||||
unsigned int crlf:1;
|
||||
};
|
||||
|
||||
#undef DRV_OK
|
||||
#define DRV_OK 0
|
||||
#define DRV_MSG_BAD -1
|
||||
#define DRV_BOX_BAD -2
|
||||
@@ -123,9 +125,6 @@ static int nfvasprintf(char **strp, const char *fmt, va_list ap)
|
||||
return len;
|
||||
}
|
||||
|
||||
static void arc4_init(void);
|
||||
static unsigned char arc4_getbyte(void);
|
||||
|
||||
struct imap_server_conf {
|
||||
char *name;
|
||||
char *tunnel;
|
||||
@@ -154,7 +153,7 @@ struct imap_list {
|
||||
};
|
||||
|
||||
struct imap_socket {
|
||||
int fd;
|
||||
int fd[2];
|
||||
SSL *ssl;
|
||||
};
|
||||
|
||||
@@ -308,8 +307,12 @@ static int ssl_socket_connect(struct imap_socket *sock, int use_tls_only, int ve
|
||||
ssl_socket_perror("SSL_new");
|
||||
return -1;
|
||||
}
|
||||
if (!SSL_set_fd(sock->ssl, sock->fd)) {
|
||||
ssl_socket_perror("SSL_set_fd");
|
||||
if (!SSL_set_rfd(sock->ssl, sock->fd[0])) {
|
||||
ssl_socket_perror("SSL_set_rfd");
|
||||
return -1;
|
||||
}
|
||||
if (!SSL_set_wfd(sock->ssl, sock->fd[1])) {
|
||||
ssl_socket_perror("SSL_set_wfd");
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -331,11 +334,12 @@ static int socket_read(struct imap_socket *sock, char *buf, int len)
|
||||
n = SSL_read(sock->ssl, buf, len);
|
||||
else
|
||||
#endif
|
||||
n = xread(sock->fd, buf, len);
|
||||
n = xread(sock->fd[0], buf, len);
|
||||
if (n <= 0) {
|
||||
socket_perror("read", sock, n);
|
||||
close(sock->fd);
|
||||
sock->fd = -1;
|
||||
close(sock->fd[0]);
|
||||
close(sock->fd[1]);
|
||||
sock->fd[0] = sock->fd[1] = -1;
|
||||
}
|
||||
return n;
|
||||
}
|
||||
@@ -348,11 +352,12 @@ static int socket_write(struct imap_socket *sock, const char *buf, int len)
|
||||
n = SSL_write(sock->ssl, buf, len);
|
||||
else
|
||||
#endif
|
||||
n = write_in_full(sock->fd, buf, len);
|
||||
n = write_in_full(sock->fd[1], buf, len);
|
||||
if (n != len) {
|
||||
socket_perror("write", sock, n);
|
||||
close(sock->fd);
|
||||
sock->fd = -1;
|
||||
close(sock->fd[0]);
|
||||
close(sock->fd[1]);
|
||||
sock->fd[0] = sock->fd[1] = -1;
|
||||
}
|
||||
return n;
|
||||
}
|
||||
@@ -365,7 +370,8 @@ static void socket_shutdown(struct imap_socket *sock)
|
||||
SSL_free(sock->ssl);
|
||||
}
|
||||
#endif
|
||||
close(sock->fd);
|
||||
close(sock->fd[0]);
|
||||
close(sock->fd[1]);
|
||||
}
|
||||
|
||||
/* simple line buffering */
|
||||
@@ -493,52 +499,6 @@ static int nfsnprintf(char *buf, int blen, const char *fmt, ...)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static struct {
|
||||
unsigned char i, j, s[256];
|
||||
} rs;
|
||||
|
||||
static void arc4_init(void)
|
||||
{
|
||||
int i, fd;
|
||||
unsigned char j, si, dat[128];
|
||||
|
||||
if ((fd = open("/dev/urandom", O_RDONLY)) < 0 && (fd = open("/dev/random", O_RDONLY)) < 0) {
|
||||
fprintf(stderr, "Fatal: no random number source available.\n");
|
||||
exit(3);
|
||||
}
|
||||
if (read_in_full(fd, dat, 128) != 128) {
|
||||
fprintf(stderr, "Fatal: cannot read random number source.\n");
|
||||
exit(3);
|
||||
}
|
||||
close(fd);
|
||||
|
||||
for (i = 0; i < 256; i++)
|
||||
rs.s[i] = i;
|
||||
for (i = j = 0; i < 256; i++) {
|
||||
si = rs.s[i];
|
||||
j += si + dat[i & 127];
|
||||
rs.s[i] = rs.s[j];
|
||||
rs.s[j] = si;
|
||||
}
|
||||
rs.i = rs.j = 0;
|
||||
|
||||
for (i = 0; i < 256; i++)
|
||||
arc4_getbyte();
|
||||
}
|
||||
|
||||
static unsigned char arc4_getbyte(void)
|
||||
{
|
||||
unsigned char si, sj;
|
||||
|
||||
rs.i++;
|
||||
si = rs.s[rs.i];
|
||||
rs.j += si;
|
||||
sj = rs.s[rs.j];
|
||||
rs.s[rs.i] = sj;
|
||||
rs.s[rs.j] = si;
|
||||
return rs.s[(si + sj) & 0xff];
|
||||
}
|
||||
|
||||
static struct imap_cmd *v_issue_imap_cmd(struct imap_store *ctx,
|
||||
struct imap_cmd_cb *cb,
|
||||
const char *fmt, va_list ap)
|
||||
@@ -964,7 +924,7 @@ static void imap_close_server(struct imap_store *ictx)
|
||||
{
|
||||
struct imap *imap = ictx->imap;
|
||||
|
||||
if (imap->buf.sock.fd != -1) {
|
||||
if (imap->buf.sock.fd[0] != -1) {
|
||||
imap_exec(ictx, NULL, "LOGOUT");
|
||||
socket_shutdown(&imap->buf.sock);
|
||||
}
|
||||
@@ -986,40 +946,35 @@ static struct store *imap_open_store(struct imap_server_conf *srvc)
|
||||
struct imap_store *ctx;
|
||||
struct imap *imap;
|
||||
char *arg, *rsp;
|
||||
int s = -1, a[2], preauth;
|
||||
pid_t pid;
|
||||
int s = -1, preauth;
|
||||
|
||||
ctx = xcalloc(sizeof(*ctx), 1);
|
||||
|
||||
ctx->imap = imap = xcalloc(sizeof(*imap), 1);
|
||||
imap->buf.sock.fd = -1;
|
||||
imap->buf.sock.fd[0] = imap->buf.sock.fd[1] = -1;
|
||||
imap->in_progress_append = &imap->in_progress;
|
||||
|
||||
/* open connection to IMAP server */
|
||||
|
||||
if (srvc->tunnel) {
|
||||
const char *argv[4];
|
||||
struct child_process tunnel = {0};
|
||||
|
||||
imap_info("Starting tunnel '%s'... ", srvc->tunnel);
|
||||
|
||||
if (socketpair(PF_UNIX, SOCK_STREAM, 0, a)) {
|
||||
perror("socketpair");
|
||||
exit(1);
|
||||
}
|
||||
argv[0] = "sh";
|
||||
argv[1] = "-c";
|
||||
argv[2] = srvc->tunnel;
|
||||
argv[3] = NULL;
|
||||
|
||||
pid = fork();
|
||||
if (pid < 0)
|
||||
_exit(127);
|
||||
if (!pid) {
|
||||
if (dup2(a[0], 0) == -1 || dup2(a[0], 1) == -1)
|
||||
_exit(127);
|
||||
close(a[0]);
|
||||
close(a[1]);
|
||||
execl("/bin/sh", "sh", "-c", srvc->tunnel, NULL);
|
||||
_exit(127);
|
||||
}
|
||||
tunnel.argv = argv;
|
||||
tunnel.in = -1;
|
||||
tunnel.out = -1;
|
||||
if (start_command(&tunnel))
|
||||
die("cannot start proxy %s", argv[0]);
|
||||
|
||||
close(a[0]);
|
||||
|
||||
imap->buf.sock.fd = a[1];
|
||||
imap->buf.sock.fd[0] = tunnel.out;
|
||||
imap->buf.sock.fd[1] = tunnel.in;
|
||||
|
||||
imap_info("ok\n");
|
||||
} else {
|
||||
@@ -1096,7 +1051,8 @@ static struct store *imap_open_store(struct imap_server_conf *srvc)
|
||||
goto bail;
|
||||
}
|
||||
|
||||
imap->buf.sock.fd = s;
|
||||
imap->buf.sock.fd[0] = s;
|
||||
imap->buf.sock.fd[1] = dup(s);
|
||||
|
||||
if (srvc->use_ssl &&
|
||||
ssl_socket_connect(&imap->buf.sock, 0, srvc->ssl_verify)) {
|
||||
@@ -1202,88 +1158,20 @@ static int imap_make_flags(int flags, char *buf)
|
||||
return d;
|
||||
}
|
||||
|
||||
#define TUIDL 8
|
||||
|
||||
static int imap_store_msg(struct store *gctx, struct msg_data *data, int *uid)
|
||||
static int imap_store_msg(struct store *gctx, struct msg_data *data)
|
||||
{
|
||||
struct imap_store *ctx = (struct imap_store *)gctx;
|
||||
struct imap *imap = ctx->imap;
|
||||
struct imap_cmd_cb cb;
|
||||
char *fmap, *buf;
|
||||
const char *prefix, *box;
|
||||
int ret, i, j, d, len, extra, nocr;
|
||||
int start, sbreak = 0, ebreak = 0;
|
||||
char flagstr[128], tuid[TUIDL * 2 + 1];
|
||||
int ret, d;
|
||||
char flagstr[128];
|
||||
|
||||
memset(&cb, 0, sizeof(cb));
|
||||
|
||||
fmap = data->data;
|
||||
len = data->len;
|
||||
nocr = !data->crlf;
|
||||
extra = 0, i = 0;
|
||||
if (!CAP(UIDPLUS) && uid) {
|
||||
nloop:
|
||||
start = i;
|
||||
while (i < len)
|
||||
if (fmap[i++] == '\n') {
|
||||
extra += nocr;
|
||||
if (i - 2 + nocr == start) {
|
||||
sbreak = ebreak = i - 2 + nocr;
|
||||
goto mktid;
|
||||
}
|
||||
if (!memcmp(fmap + start, "X-TUID: ", 8)) {
|
||||
extra -= (ebreak = i) - (sbreak = start) + nocr;
|
||||
goto mktid;
|
||||
}
|
||||
goto nloop;
|
||||
}
|
||||
/* invalid message */
|
||||
free(fmap);
|
||||
return DRV_MSG_BAD;
|
||||
mktid:
|
||||
for (j = 0; j < TUIDL; j++)
|
||||
sprintf(tuid + j * 2, "%02x", arc4_getbyte());
|
||||
extra += 8 + TUIDL * 2 + 2;
|
||||
}
|
||||
if (nocr)
|
||||
for (; i < len; i++)
|
||||
if (fmap[i] == '\n')
|
||||
extra++;
|
||||
|
||||
cb.dlen = len + extra;
|
||||
buf = cb.data = xmalloc(cb.dlen);
|
||||
i = 0;
|
||||
if (!CAP(UIDPLUS) && uid) {
|
||||
if (nocr) {
|
||||
for (; i < sbreak; i++)
|
||||
if (fmap[i] == '\n') {
|
||||
*buf++ = '\r';
|
||||
*buf++ = '\n';
|
||||
} else
|
||||
*buf++ = fmap[i];
|
||||
} else {
|
||||
memcpy(buf, fmap, sbreak);
|
||||
buf += sbreak;
|
||||
}
|
||||
memcpy(buf, "X-TUID: ", 8);
|
||||
buf += 8;
|
||||
memcpy(buf, tuid, TUIDL * 2);
|
||||
buf += TUIDL * 2;
|
||||
*buf++ = '\r';
|
||||
*buf++ = '\n';
|
||||
i = ebreak;
|
||||
}
|
||||
if (nocr) {
|
||||
for (; i < len; i++)
|
||||
if (fmap[i] == '\n') {
|
||||
*buf++ = '\r';
|
||||
*buf++ = '\n';
|
||||
} else
|
||||
*buf++ = fmap[i];
|
||||
} else
|
||||
memcpy(buf, fmap + i, len - i);
|
||||
|
||||
free(fmap);
|
||||
cb.dlen = data->len;
|
||||
cb.data = xmalloc(cb.dlen);
|
||||
memcpy(cb.data, data->data, data->len);
|
||||
|
||||
d = 0;
|
||||
if (data->flags) {
|
||||
@@ -1292,26 +1180,14 @@ static int imap_store_msg(struct store *gctx, struct msg_data *data, int *uid)
|
||||
}
|
||||
flagstr[d] = 0;
|
||||
|
||||
if (!uid) {
|
||||
box = gctx->conf->trash;
|
||||
prefix = ctx->prefix;
|
||||
cb.create = 1;
|
||||
if (ctx->trashnc)
|
||||
imap->caps = imap->rcaps & ~(1 << LITERALPLUS);
|
||||
} else {
|
||||
box = gctx->name;
|
||||
prefix = !strcmp(box, "INBOX") ? "" : ctx->prefix;
|
||||
cb.create = 0;
|
||||
}
|
||||
cb.ctx = uid;
|
||||
box = gctx->name;
|
||||
prefix = !strcmp(box, "INBOX") ? "" : ctx->prefix;
|
||||
cb.create = 0;
|
||||
ret = imap_exec_m(ctx, &cb, "APPEND \"%s%s\" %s", prefix, box, flagstr);
|
||||
imap->caps = imap->rcaps;
|
||||
if (ret != DRV_OK)
|
||||
return ret;
|
||||
if (!uid)
|
||||
ctx->trashnc = 0;
|
||||
else
|
||||
gctx->count++;
|
||||
gctx->count++;
|
||||
|
||||
return DRV_OK;
|
||||
}
|
||||
@@ -1487,7 +1363,6 @@ int main(int argc, char **argv)
|
||||
{
|
||||
struct msg_data all_msgs, msg;
|
||||
struct store *ctx = NULL;
|
||||
int uid = 0;
|
||||
int ofs = 0;
|
||||
int r;
|
||||
int total, n = 0;
|
||||
@@ -1495,9 +1370,6 @@ int main(int argc, char **argv)
|
||||
|
||||
git_extract_argv0_path(argv[0]);
|
||||
|
||||
/* init the random number generator */
|
||||
arc4_init();
|
||||
|
||||
setup_git_directory_gently(&nongit_ok);
|
||||
git_config(git_imap_config, NULL);
|
||||
|
||||
@@ -1544,7 +1416,7 @@ int main(int argc, char **argv)
|
||||
break;
|
||||
if (server.use_html)
|
||||
wrap_in_html(&msg);
|
||||
r = imap_store_msg(ctx, &msg, &uid);
|
||||
r = imap_store_msg(ctx, &msg);
|
||||
if (r != DRV_OK)
|
||||
break;
|
||||
n++;
|
||||
|
||||
@@ -7,14 +7,18 @@ test_description='A simple turial in the form of a test case'
|
||||
|
||||
. ./test-lib.sh
|
||||
|
||||
echo "Hello World" > hello
|
||||
echo "Silly example" > example
|
||||
test_expect_success 'blob' '
|
||||
echo "Hello World" > hello &&
|
||||
echo "Silly example" > example &&
|
||||
|
||||
git update-index --add hello example
|
||||
git update-index --add hello example &&
|
||||
|
||||
test_expect_success 'blob' "test blob = \"$(git cat-file -t 557db03)\""
|
||||
test blob = "$(git cat-file -t 557db03)"
|
||||
'
|
||||
|
||||
test_expect_success 'blob 557db03' "test \"Hello World\" = \"$(git cat-file blob 557db03)\""
|
||||
test_expect_success 'blob 557db03' '
|
||||
test "Hello World" = "$(git cat-file blob 557db03)"
|
||||
'
|
||||
|
||||
echo "It's a new day for git" >>hello
|
||||
cat > diff.expect << EOF
|
||||
@@ -26,25 +30,34 @@ index 557db03..263414f 100644
|
||||
Hello World
|
||||
+It's a new day for git
|
||||
EOF
|
||||
git diff-files -p > diff.output
|
||||
test_expect_success 'git diff-files -p' 'cmp diff.expect diff.output'
|
||||
git diff > diff.output
|
||||
test_expect_success 'git diff' 'cmp diff.expect diff.output'
|
||||
|
||||
tree=$(git write-tree 2>/dev/null)
|
||||
test_expect_success 'git diff-files -p' '
|
||||
git diff-files -p > diff.output &&
|
||||
test_cmp diff.expect diff.output
|
||||
'
|
||||
|
||||
test_expect_success 'tree' "test 8988da15d077d4829fc51d8544c097def6644dbb = $tree"
|
||||
test_expect_success 'git diff' '
|
||||
git diff > diff.output &&
|
||||
test_cmp diff.expect diff.output
|
||||
'
|
||||
|
||||
output="$(echo "Initial commit" | git commit-tree $(git write-tree) 2>&1 > .git/refs/heads/master)"
|
||||
test_expect_success 'tree' '
|
||||
tree=$(git write-tree 2>/dev/null)
|
||||
test 8988da15d077d4829fc51d8544c097def6644dbb = $tree
|
||||
'
|
||||
|
||||
git diff-index -p HEAD > diff.output
|
||||
test_expect_success 'git diff-index -p HEAD' 'cmp diff.expect diff.output'
|
||||
test_expect_success 'git diff-index -p HEAD' '
|
||||
tree=$(git write-tree)
|
||||
commit=$(echo "Initial commit" | git commit-tree $tree) &&
|
||||
git update-ref HEAD $commit &&
|
||||
git diff-index -p HEAD > diff.output &&
|
||||
test_cmp diff.expect diff.output
|
||||
'
|
||||
|
||||
git diff HEAD > diff.output
|
||||
test_expect_success 'git diff HEAD' 'cmp diff.expect diff.output'
|
||||
|
||||
#rm hello
|
||||
#test_expect_success 'git read-tree --reset HEAD' "git read-tree --reset HEAD ; test \"hello: needs update\" = \"$(git update-index --refresh)\""
|
||||
test_expect_success 'git diff HEAD' '
|
||||
git diff HEAD > diff.output &&
|
||||
test_cmp diff.expect diff.output
|
||||
'
|
||||
|
||||
cat > whatchanged.expect << EOF
|
||||
commit VARIABLE
|
||||
@@ -69,39 +82,45 @@ index 0000000..557db03
|
||||
+Hello World
|
||||
EOF
|
||||
|
||||
git whatchanged -p --root | \
|
||||
sed -e "1s/^\(.\{7\}\).\{40\}/\1VARIABLE/" \
|
||||
test_expect_success 'git whatchanged -p --root' '
|
||||
git whatchanged -p --root |
|
||||
sed -e "1s/^\(.\{7\}\).\{40\}/\1VARIABLE/" \
|
||||
-e "2,3s/^\(.\{8\}\).*$/\1VARIABLE/" \
|
||||
> whatchanged.output
|
||||
test_expect_success 'git whatchanged -p --root' 'cmp whatchanged.expect whatchanged.output'
|
||||
> whatchanged.output &&
|
||||
test_cmp whatchanged.expect whatchanged.output
|
||||
'
|
||||
|
||||
git tag my-first-tag
|
||||
test_expect_success 'git tag my-first-tag' 'cmp .git/refs/heads/master .git/refs/tags/my-first-tag'
|
||||
test_expect_success 'git tag my-first-tag' '
|
||||
git tag my-first-tag &&
|
||||
test_cmp .git/refs/heads/master .git/refs/tags/my-first-tag
|
||||
'
|
||||
|
||||
# TODO: test git clone
|
||||
|
||||
git checkout -b mybranch
|
||||
test_expect_success 'git checkout -b mybranch' 'cmp .git/refs/heads/master .git/refs/heads/mybranch'
|
||||
test_expect_success 'git checkout -b mybranch' '
|
||||
git checkout -b mybranch &&
|
||||
test_cmp .git/refs/heads/master .git/refs/heads/mybranch
|
||||
'
|
||||
|
||||
cat > branch.expect <<EOF
|
||||
master
|
||||
* mybranch
|
||||
EOF
|
||||
|
||||
git branch > branch.output
|
||||
test_expect_success 'git branch' 'cmp branch.expect branch.output'
|
||||
|
||||
git checkout mybranch
|
||||
echo "Work, work, work" >>hello
|
||||
git commit -m 'Some work.' -i hello
|
||||
|
||||
git checkout master
|
||||
|
||||
echo "Play, play, play" >>hello
|
||||
echo "Lots of fun" >>example
|
||||
git commit -m 'Some fun.' -i hello example
|
||||
test_expect_success 'git branch' '
|
||||
git branch > branch.output &&
|
||||
test_cmp branch.expect branch.output
|
||||
'
|
||||
|
||||
test_expect_success 'git resolve now fails' '
|
||||
git checkout mybranch &&
|
||||
echo "Work, work, work" >>hello &&
|
||||
git commit -m "Some work." -i hello &&
|
||||
|
||||
git checkout master &&
|
||||
|
||||
echo "Play, play, play" >>hello &&
|
||||
echo "Lots of fun" >>example &&
|
||||
git commit -m "Some fun." -i hello example &&
|
||||
|
||||
test_must_fail git merge -m "Merge work in mybranch" mybranch
|
||||
'
|
||||
|
||||
@@ -112,52 +131,131 @@ Play, play, play
|
||||
Work, work, work
|
||||
EOF
|
||||
|
||||
git commit -m 'Merged "mybranch" changes.' -i hello
|
||||
|
||||
test_done
|
||||
|
||||
cat > show-branch.expect << EOF
|
||||
* [master] Merged "mybranch" changes.
|
||||
* [master] Merge work in mybranch
|
||||
! [mybranch] Some work.
|
||||
--
|
||||
- [master] Merged "mybranch" changes.
|
||||
- [master] Merge work in mybranch
|
||||
*+ [mybranch] Some work.
|
||||
* [master^] Some fun.
|
||||
EOF
|
||||
|
||||
git show-branch --topo-order master mybranch > show-branch.output
|
||||
test_expect_success 'git show-branch' 'cmp show-branch.expect show-branch.output'
|
||||
|
||||
git checkout mybranch
|
||||
test_expect_success 'git show-branch' '
|
||||
git commit -m "Merge work in mybranch" -i hello &&
|
||||
git show-branch --topo-order --more=1 master mybranch \
|
||||
> show-branch.output &&
|
||||
test_cmp show-branch.expect show-branch.output
|
||||
'
|
||||
|
||||
cat > resolve.expect << EOF
|
||||
Updating from VARIABLE to VARIABLE
|
||||
Updating VARIABLE..VARIABLE
|
||||
FASTFORWARD (no commit created; -m option ignored)
|
||||
example | 1 +
|
||||
hello | 1 +
|
||||
2 files changed, 2 insertions(+), 0 deletions(-)
|
||||
EOF
|
||||
|
||||
git merge -s "Merge upstream changes." master | \
|
||||
sed -e "1s/[0-9a-f]\{40\}/VARIABLE/g" >resolve.output
|
||||
test_expect_success 'git resolve' 'cmp resolve.expect resolve.output'
|
||||
test_expect_success 'git resolve' '
|
||||
git checkout mybranch &&
|
||||
git merge -m "Merge upstream changes." master |
|
||||
sed -e "1s/[0-9a-f]\{7\}/VARIABLE/g" \
|
||||
-e "s/^Fast[- ]forward /FASTFORWARD /" >resolve.output &&
|
||||
test_cmp resolve.expect resolve.output
|
||||
'
|
||||
|
||||
cat > show-branch2.expect << EOF
|
||||
! [master] Merged "mybranch" changes.
|
||||
* [mybranch] Merged "mybranch" changes.
|
||||
! [master] Merge work in mybranch
|
||||
* [mybranch] Merge work in mybranch
|
||||
--
|
||||
-- [master] Merged "mybranch" changes.
|
||||
-- [master] Merge work in mybranch
|
||||
EOF
|
||||
|
||||
git show-branch --topo-order master mybranch > show-branch2.output
|
||||
test_expect_success 'git show-branch' 'cmp show-branch2.expect show-branch2.output'
|
||||
test_expect_success 'git show-branch (part 2)' '
|
||||
git show-branch --topo-order master mybranch > show-branch2.output &&
|
||||
test_cmp show-branch2.expect show-branch2.output
|
||||
'
|
||||
|
||||
# TODO: test git fetch
|
||||
cat > show-branch3.expect << EOF
|
||||
! [master] Merge work in mybranch
|
||||
* [mybranch] Merge work in mybranch
|
||||
--
|
||||
-- [master] Merge work in mybranch
|
||||
+* [master^2] Some work.
|
||||
+* [master^] Some fun.
|
||||
EOF
|
||||
|
||||
# TODO: test git push
|
||||
test_expect_success 'git show-branch (part 3)' '
|
||||
git show-branch --topo-order --more=2 master mybranch \
|
||||
> show-branch3.output &&
|
||||
test_cmp show-branch3.expect show-branch3.output
|
||||
'
|
||||
|
||||
test_expect_success 'rewind to "Some fun." and "Some work."' '
|
||||
git checkout mybranch &&
|
||||
git reset --hard master^2 &&
|
||||
git checkout master &&
|
||||
git reset --hard master^
|
||||
'
|
||||
|
||||
cat > show-branch4.expect << EOF
|
||||
* [master] Some fun.
|
||||
! [mybranch] Some work.
|
||||
--
|
||||
+ [mybranch] Some work.
|
||||
* [master] Some fun.
|
||||
*+ [mybranch^] Initial commit
|
||||
EOF
|
||||
|
||||
test_expect_success 'git show-branch (part 4)' '
|
||||
git show-branch --topo-order > show-branch4.output &&
|
||||
test_cmp show-branch4.expect show-branch4.output
|
||||
'
|
||||
|
||||
test_expect_success 'manual merge' '
|
||||
mb=$(git merge-base HEAD mybranch) &&
|
||||
git name-rev --name-only --tags $mb > name-rev.output &&
|
||||
test "my-first-tag" = $(cat name-rev.output) &&
|
||||
|
||||
git read-tree -m -u $mb HEAD mybranch
|
||||
'
|
||||
|
||||
cat > ls-files.expect << EOF
|
||||
100644 7f8b141b65fdcee47321e399a2598a235a032422 0 example
|
||||
100644 557db03de997c86a4a028e1ebd3a1ceb225be238 1 hello
|
||||
100644 ba42a2a96e3027f3333e13ede4ccf4498c3ae942 2 hello
|
||||
100644 cc44c73eb783565da5831b4d820c962954019b69 3 hello
|
||||
EOF
|
||||
|
||||
test_expect_success 'git ls-files --stage' '
|
||||
git ls-files --stage > ls-files.output &&
|
||||
test_cmp ls-files.expect ls-files.output
|
||||
'
|
||||
|
||||
cat > ls-files-unmerged.expect << EOF
|
||||
100644 557db03de997c86a4a028e1ebd3a1ceb225be238 1 hello
|
||||
100644 ba42a2a96e3027f3333e13ede4ccf4498c3ae942 2 hello
|
||||
100644 cc44c73eb783565da5831b4d820c962954019b69 3 hello
|
||||
EOF
|
||||
|
||||
test_expect_success 'git ls-files --unmerged' '
|
||||
git ls-files --unmerged > ls-files-unmerged.output &&
|
||||
test_cmp ls-files-unmerged.expect ls-files-unmerged.output
|
||||
'
|
||||
|
||||
test_expect_success 'git-merge-index' '
|
||||
test_must_fail git merge-index git-merge-one-file hello
|
||||
'
|
||||
|
||||
test_expect_success 'git ls-files --stage (part 2)' '
|
||||
git ls-files --stage > ls-files.output2 &&
|
||||
test_cmp ls-files.expect ls-files.output2
|
||||
'
|
||||
|
||||
test_expect_success 'git repack' 'git repack'
|
||||
test_expect_success 'git prune-packed' 'git prune-packed'
|
||||
test_expect_success '-> only packed objects' '
|
||||
! find -type f .git/objects/[0-9a-f][0-9a-f]
|
||||
git prune && # Remove conflict marked blobs
|
||||
! find .git/objects/[0-9a-f][0-9a-f] -type f
|
||||
'
|
||||
|
||||
test_done
|
||||
|
||||
@@ -19,7 +19,7 @@ test_expect_success 'init and fetch repository' '
|
||||
'
|
||||
|
||||
test_expect_success 'create file in existing ugly and empty dir' '
|
||||
mkdir "#{bad_directory_name}" &&
|
||||
mkdir -p "#{bad_directory_name}" &&
|
||||
echo hi > "#{bad_directory_name}/ foo" &&
|
||||
git update-index --add "#{bad_directory_name}/ foo" &&
|
||||
git commit -m "new file in ugly parent" &&
|
||||
@@ -37,7 +37,7 @@ test_expect_success 'rename pretty file' '
|
||||
git update-index --add pretty &&
|
||||
git commit -m "pretty :x" &&
|
||||
git svn dcommit &&
|
||||
mkdir regular_dir_name &&
|
||||
mkdir -p regular_dir_name &&
|
||||
git mv pretty regular_dir_name/pretty &&
|
||||
git commit -m "moved pretty file" &&
|
||||
git svn dcommit
|
||||
|
||||
@@ -91,4 +91,27 @@ test_expect_success 'fetch continues after authors-file is fixed' '
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success 'fresh clone with svn.authors-file in config' '
|
||||
(
|
||||
rm -r "$GIT_DIR" &&
|
||||
test x = x"$(git config svn.authorsfile)" &&
|
||||
HOME="`pwd`" &&
|
||||
export HOME &&
|
||||
test_config="$HOME"/.gitconfig &&
|
||||
unset GIT_CONFIG_NOGLOBAL &&
|
||||
unset GIT_DIR &&
|
||||
unset GIT_CONFIG &&
|
||||
git config --global \
|
||||
svn.authorsfile "$HOME"/svn-authors &&
|
||||
test x"$HOME"/svn-authors = x"$(git config svn.authorsfile)" &&
|
||||
git svn clone "$svnrepo" gitconfig.clone &&
|
||||
cd gitconfig.clone &&
|
||||
nr_ex=$(git log | grep "^Author:.*example.com" | wc -l) &&
|
||||
nr_rev=$(git rev-list HEAD | wc -l) &&
|
||||
test $nr_rev -eq $nr_ex
|
||||
)
|
||||
'
|
||||
|
||||
test_debug 'GIT_DIR=gitconfig.clone/.git git log'
|
||||
|
||||
test_done
|
||||
|
||||
85
t/t9146-git-svn-empty-dirs.sh
Executable file
85
t/t9146-git-svn-empty-dirs.sh
Executable file
@@ -0,0 +1,85 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2009 Eric Wong
|
||||
|
||||
test_description='git svn creates empty directories'
|
||||
. ./lib-git-svn.sh
|
||||
|
||||
test_expect_success 'initialize repo' '
|
||||
for i in a b c d d/e d/e/f "weird file name"
|
||||
do
|
||||
svn_cmd mkdir -m "mkdir $i" "$svnrepo"/"$i"
|
||||
done
|
||||
'
|
||||
|
||||
test_expect_success 'clone' 'git svn clone "$svnrepo" cloned'
|
||||
|
||||
test_expect_success 'empty directories exist' '
|
||||
(
|
||||
cd cloned &&
|
||||
for i in a b c d d/e d/e/f "weird file name"
|
||||
do
|
||||
if ! test -d "$i"
|
||||
then
|
||||
echo >&2 "$i does not exist"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success 'more emptiness' '
|
||||
svn_cmd mkdir -m "bang bang" "$svnrepo"/"! !"
|
||||
'
|
||||
|
||||
test_expect_success 'git svn rebase creates empty directory' '
|
||||
( cd cloned && git svn rebase )
|
||||
test -d cloned/"! !"
|
||||
'
|
||||
|
||||
test_expect_success 'git svn mkdirs recreates empty directories' '
|
||||
(
|
||||
cd cloned &&
|
||||
rm -r * &&
|
||||
git svn mkdirs &&
|
||||
for i in a b c d d/e d/e/f "weird file name" "! !"
|
||||
do
|
||||
if ! test -d "$i"
|
||||
then
|
||||
echo >&2 "$i does not exist"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success 'git svn mkdirs -r works' '
|
||||
(
|
||||
cd cloned &&
|
||||
rm -r * &&
|
||||
git svn mkdirs -r7 &&
|
||||
for i in a b c d d/e d/e/f "weird file name"
|
||||
do
|
||||
if ! test -d "$i"
|
||||
then
|
||||
echo >&2 "$i does not exist"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
if test -d "! !"
|
||||
then
|
||||
echo >&2 "$i should not exist"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
git svn mkdirs -r8 &&
|
||||
if ! test -d "! !"
|
||||
then
|
||||
echo >&2 "$i not exist"
|
||||
exit 1
|
||||
fi
|
||||
)
|
||||
'
|
||||
|
||||
test_done
|
||||
@@ -15,7 +15,11 @@ test_expect_success 'load svn dump' "
|
||||
git svn fetch --all
|
||||
"
|
||||
|
||||
test_expect_success 'svn merges were represented coming in' "
|
||||
test_expect_success 'represent svn merges without intervening commits' "
|
||||
[ `git cat-file commit HEAD^1 | grep parent | wc -l` -eq 2 ]
|
||||
"
|
||||
|
||||
test_expect_success 'represent svn merges with intervening commits' "
|
||||
[ `git cat-file commit HEAD | grep parent | wc -l` -eq 2 ]
|
||||
"
|
||||
|
||||
|
||||
@@ -28,6 +28,10 @@ svn cp trunk branches/left
|
||||
|
||||
echo "Committing BRANCH POINT"
|
||||
svn commit -m "make left branch"
|
||||
svn cp trunk branches/right
|
||||
|
||||
echo "Committing other BRANCH POINT"
|
||||
svn commit -m "make right branch"
|
||||
cd branches/left/
|
||||
|
||||
#$sm init
|
||||
@@ -64,7 +68,33 @@ git cat-file blob b51ad431:Makefile > Makefile
|
||||
|
||||
svn resolved Makefile
|
||||
|
||||
svn commit -m "Merge trunk"
|
||||
svn commit -m "Merge trunk 1"
|
||||
|
||||
# create commits on both branches
|
||||
|
||||
cd ../branches/left
|
||||
git cat-file blob ff5ebe39:Makefile > Makefile
|
||||
echo "Committing BRANCH UPDATE 4"
|
||||
svn commit -m "left update 4"
|
||||
|
||||
cd ../right
|
||||
git cat-file blob b5039db6:Makefile > Makefile
|
||||
echo "Committing other BRANCH UPDATE 1"
|
||||
svn commit -m "right update 1"
|
||||
|
||||
# merge to trun again
|
||||
|
||||
cd ../..
|
||||
svn update
|
||||
cd trunk
|
||||
|
||||
svn merge ../branches/left --accept postpone
|
||||
|
||||
git cat-file blob b51ad431:Makefile > Makefile
|
||||
|
||||
svn resolved Makefile
|
||||
|
||||
svn commit -m "Merge trunk 2"
|
||||
|
||||
cd ../..
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
SVN-fs-dump-format-version: 2
|
||||
|
||||
UUID: 1ce241d1-ba54-4eb9-bded-03057fe48a33
|
||||
UUID: 1530d5a2-a1dc-4438-8ad5-d95e96db8945
|
||||
|
||||
Revision-number: 0
|
||||
Prop-content-length: 56
|
||||
@@ -9,12 +9,12 @@ Content-length: 56
|
||||
K 8
|
||||
svn:date
|
||||
V 27
|
||||
2009-10-20T01:33:37.692723Z
|
||||
2009-11-12T20:29:38.812226Z
|
||||
PROPS-END
|
||||
|
||||
Revision-number: 1
|
||||
Prop-content-length: 123
|
||||
Content-length: 123
|
||||
Prop-content-length: 127
|
||||
Content-length: 127
|
||||
|
||||
K 7
|
||||
svn:log
|
||||
@@ -22,12 +22,12 @@ V 24
|
||||
Setup trunk and branches
|
||||
K 10
|
||||
svn:author
|
||||
V 4
|
||||
samv
|
||||
V 8
|
||||
tallsopp
|
||||
K 8
|
||||
svn:date
|
||||
V 27
|
||||
2009-10-20T01:33:38.159933Z
|
||||
2009-11-12T20:29:39.045856Z
|
||||
PROPS-END
|
||||
|
||||
Node-path: branches
|
||||
@@ -49,8 +49,8 @@ PROPS-END
|
||||
|
||||
|
||||
Revision-number: 2
|
||||
Prop-content-length: 106
|
||||
Content-length: 106
|
||||
Prop-content-length: 110
|
||||
Content-length: 110
|
||||
|
||||
K 7
|
||||
svn:log
|
||||
@@ -58,12 +58,12 @@ V 8
|
||||
ancestor
|
||||
K 10
|
||||
svn:author
|
||||
V 4
|
||||
samv
|
||||
V 8
|
||||
tallsopp
|
||||
K 8
|
||||
svn:date
|
||||
V 27
|
||||
2009-10-20T01:33:39.160059Z
|
||||
2009-11-12T20:29:40.079587Z
|
||||
PROPS-END
|
||||
|
||||
Node-path: trunk/Makefile
|
||||
@@ -72,6 +72,7 @@ Node-action: add
|
||||
Prop-content-length: 10
|
||||
Text-content-length: 2401
|
||||
Text-content-md5: bfd8ff778d1492dc6758567373176a89
|
||||
Text-content-sha1: 103205ce331f7d64086dba497574734f78439590
|
||||
Content-length: 2411
|
||||
|
||||
PROPS-END
|
||||
@@ -155,8 +156,8 @@ backup: clean
|
||||
|
||||
|
||||
Revision-number: 3
|
||||
Prop-content-length: 115
|
||||
Content-length: 115
|
||||
Prop-content-length: 119
|
||||
Content-length: 119
|
||||
|
||||
K 7
|
||||
svn:log
|
||||
@@ -164,12 +165,12 @@ V 16
|
||||
make left branch
|
||||
K 10
|
||||
svn:author
|
||||
V 4
|
||||
samv
|
||||
V 8
|
||||
tallsopp
|
||||
K 8
|
||||
svn:date
|
||||
V 27
|
||||
2009-10-20T01:33:41.148192Z
|
||||
2009-11-12T20:29:42.084439Z
|
||||
PROPS-END
|
||||
|
||||
Node-path: branches/left
|
||||
@@ -177,14 +178,6 @@ Node-kind: dir
|
||||
Node-action: add
|
||||
Node-copyfrom-rev: 1
|
||||
Node-copyfrom-path: trunk
|
||||
Prop-content-length: 34
|
||||
Content-length: 34
|
||||
|
||||
K 13
|
||||
svn:mergeinfo
|
||||
V 0
|
||||
|
||||
PROPS-END
|
||||
|
||||
|
||||
Node-path: branches/left/Makefile
|
||||
@@ -193,11 +186,46 @@ Node-action: add
|
||||
Node-copyfrom-rev: 2
|
||||
Node-copyfrom-path: trunk/Makefile
|
||||
Text-copy-source-md5: bfd8ff778d1492dc6758567373176a89
|
||||
Text-copy-source-sha1: 103205ce331f7d64086dba497574734f78439590
|
||||
|
||||
|
||||
Revision-number: 4
|
||||
Prop-content-length: 112
|
||||
Content-length: 112
|
||||
Prop-content-length: 120
|
||||
Content-length: 120
|
||||
|
||||
K 7
|
||||
svn:log
|
||||
V 17
|
||||
make right branch
|
||||
K 10
|
||||
svn:author
|
||||
V 8
|
||||
tallsopp
|
||||
K 8
|
||||
svn:date
|
||||
V 27
|
||||
2009-11-12T20:29:44.065452Z
|
||||
PROPS-END
|
||||
|
||||
Node-path: branches/right
|
||||
Node-kind: dir
|
||||
Node-action: add
|
||||
Node-copyfrom-rev: 1
|
||||
Node-copyfrom-path: trunk
|
||||
|
||||
|
||||
Node-path: branches/right/Makefile
|
||||
Node-kind: file
|
||||
Node-action: add
|
||||
Node-copyfrom-rev: 2
|
||||
Node-copyfrom-path: trunk/Makefile
|
||||
Text-copy-source-md5: bfd8ff778d1492dc6758567373176a89
|
||||
Text-copy-source-sha1: 103205ce331f7d64086dba497574734f78439590
|
||||
|
||||
|
||||
Revision-number: 5
|
||||
Prop-content-length: 116
|
||||
Content-length: 116
|
||||
|
||||
K 7
|
||||
svn:log
|
||||
@@ -205,12 +233,12 @@ V 13
|
||||
left update 1
|
||||
K 10
|
||||
svn:author
|
||||
V 4
|
||||
samv
|
||||
V 8
|
||||
tallsopp
|
||||
K 8
|
||||
svn:date
|
||||
V 27
|
||||
2009-10-20T01:33:42.148773Z
|
||||
2009-11-12T20:29:45.066262Z
|
||||
PROPS-END
|
||||
|
||||
Node-path: branches/left/Makefile
|
||||
@@ -218,6 +246,7 @@ Node-kind: file
|
||||
Node-action: change
|
||||
Text-content-length: 2465
|
||||
Text-content-md5: 16e38d9753b061731650561ce01b1195
|
||||
Text-content-sha1: 36da4b84ea9b64218ab48171dfc5c48ae025f38b
|
||||
Content-length: 2465
|
||||
|
||||
# -DCOLLISION_CHECK if you believe that SHA1's
|
||||
@@ -299,9 +328,9 @@ backup: clean
|
||||
cd .. ; tar czvf dircache.tar.gz dir-cache
|
||||
|
||||
|
||||
Revision-number: 5
|
||||
Prop-content-length: 111
|
||||
Content-length: 111
|
||||
Revision-number: 6
|
||||
Prop-content-length: 115
|
||||
Content-length: 115
|
||||
|
||||
K 7
|
||||
svn:log
|
||||
@@ -309,12 +338,12 @@ V 12
|
||||
trunk update
|
||||
K 10
|
||||
svn:author
|
||||
V 4
|
||||
samv
|
||||
V 8
|
||||
tallsopp
|
||||
K 8
|
||||
svn:date
|
||||
V 27
|
||||
2009-10-20T01:33:43.159959Z
|
||||
2009-11-12T20:29:46.278498Z
|
||||
PROPS-END
|
||||
|
||||
Node-path: trunk/Makefile
|
||||
@@ -322,6 +351,7 @@ Node-kind: file
|
||||
Node-action: change
|
||||
Text-content-length: 2521
|
||||
Text-content-md5: 0668418a621333f4aa8b6632cd63e2a0
|
||||
Text-content-sha1: 4f29afd038e52f45acb5ef8c41acfc70062a741a
|
||||
Content-length: 2521
|
||||
|
||||
# -DCOLLISION_CHECK if you believe that SHA1's
|
||||
@@ -406,9 +436,9 @@ backup: clean
|
||||
cd .. ; tar czvf dircache.tar.gz dir-cache
|
||||
|
||||
|
||||
Revision-number: 6
|
||||
Prop-content-length: 112
|
||||
Content-length: 112
|
||||
Revision-number: 7
|
||||
Prop-content-length: 116
|
||||
Content-length: 116
|
||||
|
||||
K 7
|
||||
svn:log
|
||||
@@ -416,12 +446,12 @@ V 13
|
||||
left update 2
|
||||
K 10
|
||||
svn:author
|
||||
V 4
|
||||
samv
|
||||
V 8
|
||||
tallsopp
|
||||
K 8
|
||||
svn:date
|
||||
V 27
|
||||
2009-10-20T01:33:44.164175Z
|
||||
2009-11-12T20:29:47.069090Z
|
||||
PROPS-END
|
||||
|
||||
Node-path: branches/left/Makefile
|
||||
@@ -429,6 +459,7 @@ Node-kind: file
|
||||
Node-action: change
|
||||
Text-content-length: 2529
|
||||
Text-content-md5: f6b197cc3f2e89a83e545d4bb003de73
|
||||
Text-content-sha1: 2f656677cfec0bceec85e53036ffb63e25126f8e
|
||||
Content-length: 2529
|
||||
|
||||
# -DCOLLISION_CHECK if you believe that SHA1's
|
||||
@@ -510,9 +541,9 @@ backup: clean
|
||||
cd .. ; tar czvf dircache.tar.gz dir-cache
|
||||
|
||||
|
||||
Revision-number: 7
|
||||
Prop-content-length: 112
|
||||
Content-length: 112
|
||||
Revision-number: 8
|
||||
Prop-content-length: 116
|
||||
Content-length: 116
|
||||
|
||||
K 7
|
||||
svn:log
|
||||
@@ -520,12 +551,12 @@ V 13
|
||||
left update 3
|
||||
K 10
|
||||
svn:author
|
||||
V 4
|
||||
samv
|
||||
V 8
|
||||
tallsopp
|
||||
K 8
|
||||
svn:date
|
||||
V 27
|
||||
2009-10-20T01:33:45.144214Z
|
||||
2009-11-12T20:29:48.053835Z
|
||||
PROPS-END
|
||||
|
||||
Node-path: branches/left/Makefile
|
||||
@@ -533,6 +564,7 @@ Node-kind: file
|
||||
Node-action: change
|
||||
Text-content-length: 2593
|
||||
Text-content-md5: 5ccff689fb290e00b85fe18ee50c54ba
|
||||
Text-content-sha1: a13de8e23f1483efca3e57b2b64b0ae6f740ce10
|
||||
Content-length: 2593
|
||||
|
||||
# -DCOLLISION_CHECK if you believe that SHA1's
|
||||
@@ -614,22 +646,22 @@ backup: clean
|
||||
cd .. ; tar czvf dircache.tar.gz dir-cache
|
||||
|
||||
|
||||
Revision-number: 8
|
||||
Prop-content-length: 110
|
||||
Content-length: 110
|
||||
Revision-number: 9
|
||||
Prop-content-length: 116
|
||||
Content-length: 116
|
||||
|
||||
K 7
|
||||
svn:log
|
||||
V 11
|
||||
Merge trunk
|
||||
V 13
|
||||
Merge trunk 1
|
||||
K 10
|
||||
svn:author
|
||||
V 4
|
||||
samv
|
||||
V 8
|
||||
tallsopp
|
||||
K 8
|
||||
svn:date
|
||||
V 27
|
||||
2009-10-20T01:33:48.176135Z
|
||||
2009-11-12T20:29:51.098306Z
|
||||
PROPS-END
|
||||
|
||||
Node-path: trunk
|
||||
@@ -641,7 +673,7 @@ Content-length: 53
|
||||
K 13
|
||||
svn:mergeinfo
|
||||
V 18
|
||||
/branches/left:2-7
|
||||
/branches/left:2-8
|
||||
PROPS-END
|
||||
|
||||
|
||||
@@ -650,6 +682,7 @@ Node-kind: file
|
||||
Node-action: change
|
||||
Text-content-length: 2713
|
||||
Text-content-md5: 0afbe34f244cd662b1f97d708c687f90
|
||||
Text-content-sha1: 46d9377d783e67a9b581da110352e799517c8a14
|
||||
Content-length: 2713
|
||||
|
||||
# -DCOLLISION_CHECK if you believe that SHA1's
|
||||
@@ -734,3 +767,244 @@ backup: clean
|
||||
cd .. ; tar czvf dircache.tar.gz dir-cache
|
||||
|
||||
|
||||
Revision-number: 10
|
||||
Prop-content-length: 116
|
||||
Content-length: 116
|
||||
|
||||
K 7
|
||||
svn:log
|
||||
V 13
|
||||
left update 4
|
||||
K 10
|
||||
svn:author
|
||||
V 8
|
||||
tallsopp
|
||||
K 8
|
||||
svn:date
|
||||
V 27
|
||||
2009-11-12T20:29:52.081644Z
|
||||
PROPS-END
|
||||
|
||||
Node-path: branches/left/Makefile
|
||||
Node-kind: file
|
||||
Node-action: change
|
||||
Text-content-length: 2529
|
||||
Text-content-md5: f6b197cc3f2e89a83e545d4bb003de73
|
||||
Text-content-sha1: 2f656677cfec0bceec85e53036ffb63e25126f8e
|
||||
Content-length: 2529
|
||||
|
||||
# -DCOLLISION_CHECK if you believe that SHA1's
|
||||
# 1461501637330902918203684832716283019655932542976 hashes do not give you
|
||||
# enough guarantees about no collisions between objects ever hapenning.
|
||||
#
|
||||
# -DNSEC if you want git to care about sub-second file mtimes and ctimes.
|
||||
# Note that you need some new glibc (at least >2.2.4) for this, and it will
|
||||
# BREAK YOUR LOCAL DIFFS! show-diff and anything using it will likely randomly
|
||||
# break unless your underlying filesystem supports those sub-second times
|
||||
# (my ext3 doesn't).
|
||||
CFLAGS=-g -O3 -Wall
|
||||
|
||||
CC=gcc
|
||||
|
||||
|
||||
PROG= update-cache show-diff init-db write-tree read-tree commit-tree \
|
||||
cat-file fsck-cache checkout-cache diff-tree rev-tree show-files \
|
||||
check-files ls-tree merge-base
|
||||
|
||||
all: $(PROG)
|
||||
|
||||
install: $(PROG)
|
||||
install $(PROG) $(HOME)/bin/
|
||||
|
||||
LIBS= -lssl -lz
|
||||
|
||||
init-db: init-db.o
|
||||
|
||||
update-cache: update-cache.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o update-cache update-cache.o read-cache.o $(LIBS)
|
||||
|
||||
show-diff: show-diff.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o show-diff show-diff.o read-cache.o $(LIBS)
|
||||
|
||||
write-tree: write-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o write-tree write-tree.o read-cache.o $(LIBS)
|
||||
|
||||
read-tree: read-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o read-tree read-tree.o read-cache.o $(LIBS)
|
||||
|
||||
commit-tree: commit-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o commit-tree commit-tree.o read-cache.o $(LIBS)
|
||||
|
||||
cat-file: cat-file.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o cat-file cat-file.o read-cache.o $(LIBS)
|
||||
|
||||
fsck-cache: fsck-cache.o read-cache.o object.o commit.o tree.o blob.o
|
||||
$(CC) $(CFLAGS) -o fsck-cache fsck-cache.o read-cache.o object.o commit.o tree.o blob.o $(LIBS)
|
||||
|
||||
checkout-cache: checkout-cache.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o checkout-cache checkout-cache.o read-cache.o $(LIBS)
|
||||
|
||||
diff-tree: diff-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o diff-tree diff-tree.o read-cache.o $(LIBS)
|
||||
|
||||
rev-tree: rev-tree.o read-cache.o object.o commit.o tree.o blob.o
|
||||
$(CC) $(CFLAGS) -o rev-tree rev-tree.o read-cache.o object.o commit.o tree.o blob.o $(LIBS)
|
||||
|
||||
show-files: show-files.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o show-files show-files.o read-cache.o $(LIBS)
|
||||
|
||||
check-files: check-files.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o check-files check-files.o read-cache.o $(LIBS)
|
||||
|
||||
ls-tree: ls-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o ls-tree ls-tree.o read-cache.o $(LIBS)
|
||||
|
||||
merge-base: merge-base.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o merge-base merge-base.o read-cache.o $(LIBS)
|
||||
|
||||
read-cache.o: cache.h
|
||||
show-diff.o: cache.h
|
||||
|
||||
clean:
|
||||
rm -f *.o $(PROG)
|
||||
|
||||
backup: clean
|
||||
cd .. ; tar czvf dircache.tar.gz dir-cache
|
||||
|
||||
|
||||
Revision-number: 11
|
||||
Prop-content-length: 117
|
||||
Content-length: 117
|
||||
|
||||
K 7
|
||||
svn:log
|
||||
V 14
|
||||
right update 1
|
||||
K 10
|
||||
svn:author
|
||||
V 8
|
||||
tallsopp
|
||||
K 8
|
||||
svn:date
|
||||
V 27
|
||||
2009-11-12T20:29:53.059636Z
|
||||
PROPS-END
|
||||
|
||||
Node-path: branches/right/Makefile
|
||||
Node-kind: file
|
||||
Node-action: change
|
||||
Text-content-length: 2593
|
||||
Text-content-md5: 5ccff689fb290e00b85fe18ee50c54ba
|
||||
Text-content-sha1: a13de8e23f1483efca3e57b2b64b0ae6f740ce10
|
||||
Content-length: 2593
|
||||
|
||||
# -DCOLLISION_CHECK if you believe that SHA1's
|
||||
# 1461501637330902918203684832716283019655932542976 hashes do not give you
|
||||
# enough guarantees about no collisions between objects ever hapenning.
|
||||
#
|
||||
# -DNSEC if you want git to care about sub-second file mtimes and ctimes.
|
||||
# Note that you need some new glibc (at least >2.2.4) for this, and it will
|
||||
# BREAK YOUR LOCAL DIFFS! show-diff and anything using it will likely randomly
|
||||
# break unless your underlying filesystem supports those sub-second times
|
||||
# (my ext3 doesn't).
|
||||
CFLAGS=-g -O3 -Wall
|
||||
|
||||
CC=gcc
|
||||
|
||||
|
||||
PROG= update-cache show-diff init-db write-tree read-tree commit-tree \
|
||||
cat-file fsck-cache checkout-cache diff-tree rev-tree show-files \
|
||||
check-files ls-tree merge-base
|
||||
|
||||
all: $(PROG)
|
||||
|
||||
install: $(PROG)
|
||||
install $(PROG) $(HOME)/bin/
|
||||
|
||||
LIBS= -lssl -lz
|
||||
|
||||
init-db: init-db.o
|
||||
|
||||
update-cache: update-cache.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o update-cache update-cache.o read-cache.o $(LIBS)
|
||||
|
||||
show-diff: show-diff.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o show-diff show-diff.o read-cache.o $(LIBS)
|
||||
|
||||
write-tree: write-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o write-tree write-tree.o read-cache.o $(LIBS)
|
||||
|
||||
read-tree: read-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o read-tree read-tree.o read-cache.o $(LIBS)
|
||||
|
||||
commit-tree: commit-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o commit-tree commit-tree.o read-cache.o $(LIBS)
|
||||
|
||||
cat-file: cat-file.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o cat-file cat-file.o read-cache.o $(LIBS)
|
||||
|
||||
fsck-cache: fsck-cache.o read-cache.o object.o commit.o tree.o blob.o
|
||||
$(CC) $(CFLAGS) -o fsck-cache fsck-cache.o read-cache.o object.o commit.o tree.o blob.o $(LIBS)
|
||||
|
||||
checkout-cache: checkout-cache.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o checkout-cache checkout-cache.o read-cache.o $(LIBS)
|
||||
|
||||
diff-tree: diff-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o diff-tree diff-tree.o read-cache.o $(LIBS)
|
||||
|
||||
rev-tree: rev-tree.o read-cache.o object.o commit.o tree.o blob.o
|
||||
$(CC) $(CFLAGS) -o rev-tree rev-tree.o read-cache.o object.o commit.o tree.o blob.o $(LIBS)
|
||||
|
||||
show-files: show-files.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o show-files show-files.o read-cache.o $(LIBS)
|
||||
|
||||
check-files: check-files.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o check-files check-files.o read-cache.o $(LIBS)
|
||||
|
||||
ls-tree: ls-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o ls-tree ls-tree.o read-cache.o $(LIBS)
|
||||
|
||||
merge-base: merge-base.o read-cache.o object.o commit.o tree.o blob.o
|
||||
$(CC) $(CFLAGS) -o merge-base merge-base.o read-cache.o object.o commit.o tree.o blob.o $(LIBS)
|
||||
|
||||
read-cache.o: cache.h
|
||||
show-diff.o: cache.h
|
||||
|
||||
clean:
|
||||
rm -f *.o $(PROG)
|
||||
|
||||
backup: clean
|
||||
cd .. ; tar czvf dircache.tar.gz dir-cache
|
||||
|
||||
|
||||
Revision-number: 12
|
||||
Prop-content-length: 116
|
||||
Content-length: 116
|
||||
|
||||
K 7
|
||||
svn:log
|
||||
V 13
|
||||
Merge trunk 2
|
||||
K 10
|
||||
svn:author
|
||||
V 8
|
||||
tallsopp
|
||||
K 8
|
||||
svn:date
|
||||
V 27
|
||||
2009-11-12T20:29:56.083003Z
|
||||
PROPS-END
|
||||
|
||||
Node-path: trunk
|
||||
Node-kind: dir
|
||||
Node-action: change
|
||||
Prop-content-length: 54
|
||||
Content-length: 54
|
||||
|
||||
K 13
|
||||
svn:mergeinfo
|
||||
V 19
|
||||
/branches/left:2-11
|
||||
PROPS-END
|
||||
|
||||
|
||||
|
||||
@@ -308,6 +308,23 @@ static void create_pack_file(void)
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (0 <= pe && (pfd[pe].revents & (POLLIN|POLLHUP))) {
|
||||
/* Status ready; we ship that in the side-band
|
||||
* or dump to the standard error.
|
||||
*/
|
||||
sz = xread(pack_objects.err, progress,
|
||||
sizeof(progress));
|
||||
if (0 < sz)
|
||||
send_client_data(2, progress, sz);
|
||||
else if (sz == 0) {
|
||||
close(pack_objects.err);
|
||||
pack_objects.err = -1;
|
||||
}
|
||||
else
|
||||
goto fail;
|
||||
/* give priority to status messages */
|
||||
continue;
|
||||
}
|
||||
if (0 <= pu && (pfd[pu].revents & (POLLIN|POLLHUP))) {
|
||||
/* Data ready; we keep the last byte to ourselves
|
||||
* in case we detect broken rev-list, so that we
|
||||
@@ -345,21 +362,6 @@ static void create_pack_file(void)
|
||||
if (sz < 0)
|
||||
goto fail;
|
||||
}
|
||||
if (0 <= pe && (pfd[pe].revents & (POLLIN|POLLHUP))) {
|
||||
/* Status ready; we ship that in the side-band
|
||||
* or dump to the standard error.
|
||||
*/
|
||||
sz = xread(pack_objects.err, progress,
|
||||
sizeof(progress));
|
||||
if (0 < sz)
|
||||
send_client_data(2, progress, sz);
|
||||
else if (sz == 0) {
|
||||
close(pack_objects.err);
|
||||
pack_objects.err = -1;
|
||||
}
|
||||
else
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
||||
if (finish_command(&pack_objects)) {
|
||||
|
||||
Reference in New Issue
Block a user