@@ -220,7 +220,8 @@ struct branch
220220 const char * name ;
221221 struct tree_entry branch_tree ;
222222 uintmax_t last_commit ;
223- unsigned int pack_id ;
223+ unsigned active : 1 ;
224+ unsigned pack_id : PACK_ID_BITS ;
224225 unsigned char sha1 [20 ];
225226};
226227
@@ -528,6 +529,7 @@ static struct branch *new_branch(const char *name)
528529 b -> table_next_branch = branch_table [hc ];
529530 b -> branch_tree .versions [0 ].mode = S_IFDIR ;
530531 b -> branch_tree .versions [1 ].mode = S_IFDIR ;
532+ b -> active = 0 ;
531533 b -> pack_id = MAX_PACK_ID ;
532534 branch_table [hc ] = b ;
533535 branch_count ++ ;
@@ -1547,6 +1549,7 @@ static void unload_one_branch(void)
15471549 e = active_branches ;
15481550 active_branches = e -> active_next_branch ;
15491551 }
1552+ e -> active = 0 ;
15501553 e -> active_next_branch = NULL ;
15511554 if (e -> branch_tree .tree ) {
15521555 release_tree_content_recursive (e -> branch_tree .tree );
@@ -1559,10 +1562,13 @@ static void unload_one_branch(void)
15591562static void load_branch (struct branch * b )
15601563{
15611564 load_tree (& b -> branch_tree );
1562- b -> active_next_branch = active_branches ;
1563- active_branches = b ;
1564- cur_active_branches ++ ;
1565- branch_load_count ++ ;
1565+ if (!b -> active ) {
1566+ b -> active = 1 ;
1567+ b -> active_next_branch = active_branches ;
1568+ active_branches = b ;
1569+ cur_active_branches ++ ;
1570+ branch_load_count ++ ;
1571+ }
15661572}
15671573
15681574static void file_change_m (struct branch * b )
@@ -1746,7 +1752,14 @@ static struct hash_list *cmd_merge(unsigned int *count)
17461752 if (oe -> type != OBJ_COMMIT )
17471753 die ("Mark :%" PRIuMAX " not a commit" , idnum );
17481754 hashcpy (n -> sha1 , oe -> sha1 );
1749- } else if (get_sha1 (from , n -> sha1 ))
1755+ } else if (!get_sha1 (from , n -> sha1 )) {
1756+ unsigned long size ;
1757+ char * buf = read_object_with_reference (n -> sha1 ,
1758+ commit_type , & size , n -> sha1 );
1759+ if (!buf || size < 46 )
1760+ die ("Not a valid commit: %s" , from );
1761+ free (buf );
1762+ } else
17501763 die ("Invalid ref name or SHA1 expression: %s" , from );
17511764
17521765 n -> next = NULL ;
0 commit comments