Merge branch 'master-for-junio' of git://repo.or.cz/git/fastimport; branch 'maint'
authorJunio C Hamano <junkio@cox.net>
Tue, 6 Mar 2007 05:23:46 +0000 (21:23 -0800)
committerJunio C Hamano <junkio@cox.net>
Tue, 6 Mar 2007 05:23:46 +0000 (21:23 -0800)
* 'master-for-junio' of git://repo.or.cz/git/fastimport:
fast-import: Fail if a non-existant commit is used for merge
fast-import: Avoid infinite loop after reset

* maint:
Fix diff-options references in git-diff and git-format-patch
Add definition of <commit-ish> to the main git man page.
Begin SubmittingPatches with a check list
fast-import: Fail if a non-existant commit is used for merge
fast-import: Avoid infinite loop after reset

Documentation/SubmittingPatches
Documentation/git-diff.txt
Documentation/git-format-patch.txt
Documentation/git.txt
fast-import.c
index 285781d9db8d337dadf5a59bbf46183d2f816fac..131bcff9b2367d63d7c8960487893bfcbfcfaa40 100644 (file)
@@ -1,3 +1,30 @@
+Checklist (and a short version for the impatient):
+
+       - make commits of logical units
+       - check for unnecessary whitespace with "git diff --check"
+         before committing
+       - do not check in commented out code or unneeded files
+       - provide a meaningful commit message
+       - the first line of the commit message should be a short
+         description and should skip the full stop
+       - if you want your work included in git.git, add a
+         "Signed-off-by: Your Name <your@email.com>" line to the
+         commit message (or just use the option "-s" when
+         committing) to confirm that you agree to the Developer's
+         Certificate of Origin
+       - do not PGP sign your patch
+       - use "git format-patch -M" to create the patch
+       - do not attach your patch, but read in the mail
+         body, unless you cannot teach your mailer to
+         leave the formatting of the patch alone.
+       - be careful doing cut & paste into your mailer, not to
+         corrupt whitespaces.
+       - provide additional information (which is unsuitable for
+         the commit message) between the "---" and the diffstat
+       - send the patch to the list _and_ the maintainer
+
+Long version:
+
 I started reading over the SubmittingPatches document for Linux
 kernel, primarily because I wanted to have a document similar to
 it for the core GIT to make sure people understand what they are
index 12a531d1e9e4a7382f017ac303203e20abf47f2f..044cee9b425bedc7addd9a4418b553557902711b 100644 (file)
@@ -8,7 +8,7 @@ git-diff - Show changes between commits, commit and working tree, etc
 
 SYNOPSIS
 --------
-'git-diff' [ --diff-options ] <commit>{0,2} [--] [<path>...]
+'git-diff' [<common diff options>] <commit>{0,2} [--] [<path>...]
 
 DESCRIPTION
 -----------
index 59f34b9f0d2f4fe74fa5d90bb53393c88d36476b..84eabebe0bc767112805d2d35c68ad000d8e1003 100644 (file)
@@ -9,8 +9,8 @@ git-format-patch - Prepare patches for e-mail submission
 SYNOPSIS
 --------
 [verse]
-'git-format-patch' [-n | -k] [-o <dir> | --stdout] [--attach] [--thread]
-                  [-s | --signoff] [--diff-options] [--start-number <n>]
+'git-format-patch' [<common diff options>] [-n | -k] [-o <dir> | --stdout]
+                  [--attach] [--thread] [-s | --signoff] [--start-number <n>]
                   [--in-reply-to=Message-Id] [--suffix=.<sfx>]
                   [--ignore-if-in-upstream]
                   <since>[..<until>]
@@ -46,6 +46,8 @@ reference.
 
 OPTIONS
 -------
+include::diff-options.txt[]
+
 -o|--output-directory <dir>::
        Use <dir> to store the resulting files, instead of the
        current working directory.
index 0577ad0a8cfb9d7150fb874f15e155b56fe58ad8..e875e8318d24fa046c7cddfc3e583b4c242d9302 100644 (file)
@@ -241,6 +241,12 @@ Identifier Terminology
        operate on a <tree> object but automatically dereferences
        <commit> and <tag> objects that point at a <tree>.
 
+<commit-ish>::
+       Indicates a commit or tag object name.  A
+       command that takes a <commit-ish> argument ultimately wants to
+       operate on a <commit> object but automatically dereferences
+       <tag> objects that point at a <commit>.
+
 <type>::
        Indicates that an object type is required.
        Currently one of: `blob`, `tree`, `commit`, or `tag`.
index 65e99c2e8b14840f70c027deb360d5d3c5292959..cc3347b23d0c7dba1bc05c65cb58215c92bb8547 100644 (file)
@@ -220,7 +220,8 @@ struct branch
        const char *name;
        struct tree_entry branch_tree;
        uintmax_t last_commit;
-       unsigned int pack_id;
+       unsigned active : 1;
+       unsigned pack_id : PACK_ID_BITS;
        unsigned char sha1[20];
 };
 
@@ -528,6 +529,7 @@ static struct branch *new_branch(const char *name)
        b->table_next_branch = branch_table[hc];
        b->branch_tree.versions[0].mode = S_IFDIR;
        b->branch_tree.versions[1].mode = S_IFDIR;
+       b->active = 0;
        b->pack_id = MAX_PACK_ID;
        branch_table[hc] = b;
        branch_count++;
@@ -1547,6 +1549,7 @@ static void unload_one_branch(void)
                        e = active_branches;
                        active_branches = e->active_next_branch;
                }
+               e->active = 0;
                e->active_next_branch = NULL;
                if (e->branch_tree.tree) {
                        release_tree_content_recursive(e->branch_tree.tree);
@@ -1559,10 +1562,13 @@ static void unload_one_branch(void)
 static void load_branch(struct branch *b)
 {
        load_tree(&b->branch_tree);
-       b->active_next_branch = active_branches;
-       active_branches = b;
-       cur_active_branches++;
-       branch_load_count++;
+       if (!b->active) {
+               b->active = 1;
+               b->active_next_branch = active_branches;
+               active_branches = b;
+               cur_active_branches++;
+               branch_load_count++;
+       }
 }
 
 static void file_change_m(struct branch *b)
@@ -1746,7 +1752,14 @@ static struct hash_list *cmd_merge(unsigned int *count)
                        if (oe->type != OBJ_COMMIT)
                                die("Mark :%" PRIuMAX " not a commit", idnum);
                        hashcpy(n->sha1, oe->sha1);
-               } else if (get_sha1(from, n->sha1))
+               } else if (!get_sha1(from, n->sha1)) {
+                       unsigned long size;
+                       char *buf = read_object_with_reference(n->sha1,
+                               commit_type, &size, n->sha1);
+                       if (!buf || size < 46)
+                               die("Not a valid commit: %s", from);
+                       free(buf);
+               } else
                        die("Invalid ref name or SHA1 expression: %s", from);
 
                n->next = NULL;