Merge branch 'pe/date' into next
authorJunio C Hamano <junkio@cox.net>
Fri, 9 Jun 2006 04:23:35 +0000 (21:23 -0700)
committerJunio C Hamano <junkio@cox.net>
Fri, 9 Jun 2006 04:23:35 +0000 (21:23 -0700)
* pe/date:
date.c: improve guess between timezone offset and year.
git-rm: honor -n flag.
git-clone: fix duplicated "master" in $GIT_DIR/remotes/origin
check for error return from fork()
Document git-clone --use-separate-remote

Documentation/git-clone.txt
builtin-rm.c
connect.c
date.c
git-clone.sh
imap-send.c
rsh.c
index 94d93933721274be4b5c4e3f5694593ec74fd22c..7572e4b80d0f71cea1c93e9078e885d71594ff24 100644 (file)
@@ -11,7 +11,7 @@ SYNOPSIS
 [verse]
 'git-clone' [--template=<template_directory>] [-l [-s]] [-q] [-n] [--bare]
          [-o <name>] [-u <upload-pack>] [--reference <repository>]
-         <repository> [<directory>]
+         [--use-separate-remote] <repository> [<directory>]
 
 DESCRIPTION
 -----------
@@ -73,7 +73,7 @@ OPTIONS
        files in `<directory>/.git`, make the `<directory>`
        itself the `$GIT_DIR`. This implies `-n` option.  When
        this option is used, neither the `origin` branch nor the
-       default `remotes/origin` file is created.
+       default `remotes/origin` file is created.
 
 -o <name>::
        Instead of using the branch name 'origin' to keep track
@@ -94,12 +94,17 @@ OPTIONS
        if unset the templates are taken from the installation
        defined default, typically `/usr/share/git-core/templates`.
 
+--use-separate-remote::
+       Save remotes heads under `$GIT_DIR/remotes/origin/' instead
+       of `$GIT_DIR/refs/heads/'.  Only the master branch is saved
+       in the latter.
+
 <repository>::
        The (possibly remote) repository to clone from.  It can
        be any URL git-fetch supports.
 
 <directory>::
-       The name of a new directory to clone into.  The "humanish"
+       The name of a new directory to clone into.  The "humanish"
        part of the source repository is used if no directory is
        explicitly given ("repo" for "/path/to/repo.git" and "foo"
        for "host.xz:foo/.git").  Cloning into an existing directory
index ef2f8b5d099555c259a39985d8e765cf378e4431..4d56a1f07065e6e8ebaa95fdfe843cffb6283af3 100644 (file)
@@ -83,15 +83,15 @@ int cmd_rm(int argc, const char **argv, char **envp)
                }
                die(builtin_rm_usage);
        }
-       pathspec = get_pathspec(prefix, argv + i);
+       if (argc <= i)
+               usage(builtin_rm_usage);
 
+       pathspec = get_pathspec(prefix, argv + i);
        seen = NULL;
-       if (pathspec) {
-               for (i = 0; pathspec[i] ; i++)
-                       /* nothing */;
-               seen = xmalloc(i);
-               memset(seen, 0, i);
-       }
+       for (i = 0; pathspec[i] ; i++)
+               /* nothing */;
+       seen = xmalloc(i);
+       memset(seen, 0, i);
 
        for (i = 0; i < active_nr; i++) {
                struct cache_entry *ce = active_cache[i];
@@ -121,6 +121,9 @@ int cmd_rm(int argc, const char **argv, char **envp)
                cache_tree_invalidate_path(active_cache_tree, path);
        }
 
+       if (show_only)
+               return 0;
+
        /*
         * Then, if we used "-f", remove the filenames from the
         * workspace. If we fail to remove the first one, we
index eca94f75485ecf6ac585e3e6c8d12f7978b24f06..52d709e58d53f053ec00bfb9f31501684cbaf0e5 100644 (file)
--- a/connect.c
+++ b/connect.c
@@ -657,6 +657,8 @@ int git_connect(int fd[2], char *url, const char *prog)
        if (pipe(pipefd[0]) < 0 || pipe(pipefd[1]) < 0)
                die("unable to create pipe pair for communication");
        pid = fork();
+       if (pid < 0)
+               die("unable to fork");
        if (!pid) {
                snprintf(command, sizeof(command), "%s %s", prog,
                         sq_quote(path));
diff --git a/date.c b/date.c
index 365dc3b14e47826dd7becf19a76e29bfaa6b2eb5..66be23ab21ef855ecbadeceae1dea2972efd4c2f 100644 (file)
--- a/date.c
+++ b/date.c
@@ -369,7 +369,7 @@ static int match_digit(const char *date, struct tm *tm, int *offset, int *tm_gmt
 
        /* Four-digit year or a timezone? */
        if (n == 4) {
-               if (num <= 1200 && *offset == -1) {
+               if (num <= 1400 && *offset == -1) {
                        unsigned int minutes = num % 100;
                        unsigned int hours = num / 100;
                        *offset = hours*60 + minutes;
index de59904d56155faecedbd7cd4818a741dde43ffd..64318b4dd3dcfb1f486042d9459c792f4ac7fe7e 100755 (executable)
@@ -391,11 +391,16 @@ Pull: refs/heads/$head_points_at:$origin_track" &&
                (cd "$GIT_DIR/$remote_top" && find . -type f -print) |
                while read dotslref
                do
-                       name=`expr "$dotslref" : './\(.*\)'` &&
-                       test "$use_separate_remote" = '' && {
-                               test "$head_points_at" = "$name" ||
-                               test "$origin" = "$name"
-                       } ||
+                       name=`expr "$dotslref" : './\(.*\)'`
+                       if test "z$head_points_at" = "z$name"
+                       then
+                               continue
+                       fi
+                       if test "$use_separate_remote" = '' &&
+                          test "z$origin" = "z$name"
+                       then
+                               continue
+                       fi
                        echo "Pull: refs/heads/${name}:$remote_top/${name}"
                done >>"$GIT_DIR/remotes/$origin" &&
                case "$use_separate_remote" in
index 52e2400b57118e7f9a27c85212e1c539d16add7c..285ad29afb4c4126010ddc2f76963b4f8f1cce70 100644 (file)
@@ -924,6 +924,7 @@ imap_open_store( imap_server_conf_t *srvc )
        struct hostent *he;
        struct sockaddr_in addr;
        int s, a[2], preauth;
+       pid_t pid;
 
        ctx = xcalloc( sizeof(*ctx), 1 );
 
@@ -941,7 +942,10 @@ imap_open_store( imap_server_conf_t *srvc )
                        exit( 1 );
                }
 
-               if (fork() == 0) {
+               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] );
diff --git a/rsh.c b/rsh.c
index d66526941fbe45f99e51babc2c55a63b4baa027c..07166addd9629675c4b0c7c065564a283014b69d 100644 (file)
--- a/rsh.c
+++ b/rsh.c
@@ -48,6 +48,7 @@ int setup_connection(int *fd_in, int *fd_out, const char *remote_prog,
        int sizen;
        int of;
        int i;
+       pid_t pid;
 
        if (!strcmp(url, "-")) {
                *fd_in = 0;
@@ -91,7 +92,10 @@ int setup_connection(int *fd_in, int *fd_out, const char *remote_prog,
        if (socketpair(AF_UNIX, SOCK_STREAM, 0, sv))
                return error("Couldn't create socket");
 
-       if (!fork()) {
+       pid = fork();
+       if (pid < 0)
+               return error("Couldn't fork");
+       if (!pid) {
                const char *ssh, *ssh_basename;
                ssh = getenv("GIT_SSH");
                if (!ssh) ssh = "ssh";