1/* 2 * GIT - The information manager from hell 3 * 4 * Copyright (C) Linus Torvalds, 2005 5 */ 6#define NO_THE_INDEX_COMPATIBILITY_MACROS 7#include"cache.h" 8#include"config.h" 9#include"tempfile.h" 10#include"lockfile.h" 11#include"cache-tree.h" 12#include"refs.h" 13#include"dir.h" 14#include"tree.h" 15#include"commit.h" 16#include"blob.h" 17#include"resolve-undo.h" 18#include"strbuf.h" 19#include"varint.h" 20#include"split-index.h" 21#include"utf8.h" 22#include"fsmonitor.h" 23 24/* Mask for the name length in ce_flags in the on-disk index */ 25 26#define CE_NAMEMASK (0x0fff) 27 28/* Index extensions. 29 * 30 * The first letter should be 'A'..'Z' for extensions that are not 31 * necessary for a correct operation (i.e. optimization data). 32 * When new extensions are added that _needs_ to be understood in 33 * order to correctly interpret the index file, pick character that 34 * is outside the range, to cause the reader to abort. 35 */ 36 37#define CACHE_EXT(s) ( (s[0]<<24)|(s[1]<<16)|(s[2]<<8)|(s[3]) ) 38#define CACHE_EXT_TREE 0x54524545/* "TREE" */ 39#define CACHE_EXT_RESOLVE_UNDO 0x52455543/* "REUC" */ 40#define CACHE_EXT_LINK 0x6c696e6b/* "link" */ 41#define CACHE_EXT_UNTRACKED 0x554E5452/* "UNTR" */ 42#define CACHE_EXT_FSMONITOR 0x46534D4E/* "FSMN" */ 43 44/* changes that can be kept in $GIT_DIR/index (basically all extensions) */ 45#define EXTMASK (RESOLVE_UNDO_CHANGED | CACHE_TREE_CHANGED | \ 46 CE_ENTRY_ADDED | CE_ENTRY_REMOVED | CE_ENTRY_CHANGED | \ 47 SPLIT_INDEX_ORDERED | UNTRACKED_CHANGED | FSMONITOR_CHANGED) 48 49struct index_state the_index; 50static const char*alternate_index_output; 51 52static voidset_index_entry(struct index_state *istate,int nr,struct cache_entry *ce) 53{ 54 istate->cache[nr] = ce; 55add_name_hash(istate, ce); 56} 57 58static voidreplace_index_entry(struct index_state *istate,int nr,struct cache_entry *ce) 59{ 60struct cache_entry *old = istate->cache[nr]; 61 62replace_index_entry_in_base(istate, old, ce); 63remove_name_hash(istate, old); 64free(old); 65set_index_entry(istate, nr, ce); 66 ce->ce_flags |= CE_UPDATE_IN_BASE; 67mark_fsmonitor_invalid(istate, ce); 68 istate->cache_changed |= CE_ENTRY_CHANGED; 69} 70 71voidrename_index_entry_at(struct index_state *istate,int nr,const char*new_name) 72{ 73struct cache_entry *old = istate->cache[nr], *new; 74int namelen =strlen(new_name); 75 76new=xmalloc(cache_entry_size(namelen)); 77copy_cache_entry(new, old); 78new->ce_flags &= ~CE_HASHED; 79new->ce_namelen = namelen; 80new->index =0; 81memcpy(new->name, new_name, namelen +1); 82 83cache_tree_invalidate_path(istate, old->name); 84untracked_cache_remove_from_index(istate, old->name); 85remove_index_entry_at(istate, nr); 86add_index_entry(istate,new, ADD_CACHE_OK_TO_ADD|ADD_CACHE_OK_TO_REPLACE); 87} 88 89voidfill_stat_data(struct stat_data *sd,struct stat *st) 90{ 91 sd->sd_ctime.sec = (unsigned int)st->st_ctime; 92 sd->sd_mtime.sec = (unsigned int)st->st_mtime; 93 sd->sd_ctime.nsec =ST_CTIME_NSEC(*st); 94 sd->sd_mtime.nsec =ST_MTIME_NSEC(*st); 95 sd->sd_dev = st->st_dev; 96 sd->sd_ino = st->st_ino; 97 sd->sd_uid = st->st_uid; 98 sd->sd_gid = st->st_gid; 99 sd->sd_size = st->st_size; 100} 101 102intmatch_stat_data(const struct stat_data *sd,struct stat *st) 103{ 104int changed =0; 105 106if(sd->sd_mtime.sec != (unsigned int)st->st_mtime) 107 changed |= MTIME_CHANGED; 108if(trust_ctime && check_stat && 109 sd->sd_ctime.sec != (unsigned int)st->st_ctime) 110 changed |= CTIME_CHANGED; 111 112#ifdef USE_NSEC 113if(check_stat && sd->sd_mtime.nsec !=ST_MTIME_NSEC(*st)) 114 changed |= MTIME_CHANGED; 115if(trust_ctime && check_stat && 116 sd->sd_ctime.nsec !=ST_CTIME_NSEC(*st)) 117 changed |= CTIME_CHANGED; 118#endif 119 120if(check_stat) { 121if(sd->sd_uid != (unsigned int) st->st_uid || 122 sd->sd_gid != (unsigned int) st->st_gid) 123 changed |= OWNER_CHANGED; 124if(sd->sd_ino != (unsigned int) st->st_ino) 125 changed |= INODE_CHANGED; 126} 127 128#ifdef USE_STDEV 129/* 130 * st_dev breaks on network filesystems where different 131 * clients will have different views of what "device" 132 * the filesystem is on 133 */ 134if(check_stat && sd->sd_dev != (unsigned int) st->st_dev) 135 changed |= INODE_CHANGED; 136#endif 137 138if(sd->sd_size != (unsigned int) st->st_size) 139 changed |= DATA_CHANGED; 140 141return changed; 142} 143 144/* 145 * This only updates the "non-critical" parts of the directory 146 * cache, ie the parts that aren't tracked by GIT, and only used 147 * to validate the cache. 148 */ 149voidfill_stat_cache_info(struct cache_entry *ce,struct stat *st) 150{ 151fill_stat_data(&ce->ce_stat_data, st); 152 153if(assume_unchanged) 154 ce->ce_flags |= CE_VALID; 155 156if(S_ISREG(st->st_mode)) { 157ce_mark_uptodate(ce); 158mark_fsmonitor_valid(ce); 159} 160} 161 162static intce_compare_data(const struct cache_entry *ce,struct stat *st) 163{ 164int match = -1; 165int fd =git_open_cloexec(ce->name, O_RDONLY); 166 167if(fd >=0) { 168struct object_id oid; 169if(!index_fd(&oid, fd, st, OBJ_BLOB, ce->name,0)) 170 match =oidcmp(&oid, &ce->oid); 171/* index_fd() closed the file descriptor already */ 172} 173return match; 174} 175 176static intce_compare_link(const struct cache_entry *ce,size_t expected_size) 177{ 178int match = -1; 179void*buffer; 180unsigned long size; 181enum object_type type; 182struct strbuf sb = STRBUF_INIT; 183 184if(strbuf_readlink(&sb, ce->name, expected_size)) 185return-1; 186 187 buffer =read_sha1_file(ce->oid.hash, &type, &size); 188if(buffer) { 189if(size == sb.len) 190 match =memcmp(buffer, sb.buf, size); 191free(buffer); 192} 193strbuf_release(&sb); 194return match; 195} 196 197static intce_compare_gitlink(const struct cache_entry *ce) 198{ 199struct object_id oid; 200 201/* 202 * We don't actually require that the .git directory 203 * under GITLINK directory be a valid git directory. It 204 * might even be missing (in case nobody populated that 205 * sub-project). 206 * 207 * If so, we consider it always to match. 208 */ 209if(resolve_gitlink_ref(ce->name,"HEAD", &oid) <0) 210return0; 211returnoidcmp(&oid, &ce->oid); 212} 213 214static intce_modified_check_fs(const struct cache_entry *ce,struct stat *st) 215{ 216switch(st->st_mode & S_IFMT) { 217case S_IFREG: 218if(ce_compare_data(ce, st)) 219return DATA_CHANGED; 220break; 221case S_IFLNK: 222if(ce_compare_link(ce,xsize_t(st->st_size))) 223return DATA_CHANGED; 224break; 225case S_IFDIR: 226if(S_ISGITLINK(ce->ce_mode)) 227returnce_compare_gitlink(ce) ? DATA_CHANGED :0; 228/* else fallthrough */ 229default: 230return TYPE_CHANGED; 231} 232return0; 233} 234 235static intce_match_stat_basic(const struct cache_entry *ce,struct stat *st) 236{ 237unsigned int changed =0; 238 239if(ce->ce_flags & CE_REMOVE) 240return MODE_CHANGED | DATA_CHANGED | TYPE_CHANGED; 241 242switch(ce->ce_mode & S_IFMT) { 243case S_IFREG: 244 changed |= !S_ISREG(st->st_mode) ? TYPE_CHANGED :0; 245/* We consider only the owner x bit to be relevant for 246 * "mode changes" 247 */ 248if(trust_executable_bit && 249(0100& (ce->ce_mode ^ st->st_mode))) 250 changed |= MODE_CHANGED; 251break; 252case S_IFLNK: 253if(!S_ISLNK(st->st_mode) && 254(has_symlinks || !S_ISREG(st->st_mode))) 255 changed |= TYPE_CHANGED; 256break; 257case S_IFGITLINK: 258/* We ignore most of the st_xxx fields for gitlinks */ 259if(!S_ISDIR(st->st_mode)) 260 changed |= TYPE_CHANGED; 261else if(ce_compare_gitlink(ce)) 262 changed |= DATA_CHANGED; 263return changed; 264default: 265die("internal error: ce_mode is%o", ce->ce_mode); 266} 267 268 changed |=match_stat_data(&ce->ce_stat_data, st); 269 270/* Racily smudged entry? */ 271if(!ce->ce_stat_data.sd_size) { 272if(!is_empty_blob_sha1(ce->oid.hash)) 273 changed |= DATA_CHANGED; 274} 275 276return changed; 277} 278 279static intis_racy_stat(const struct index_state *istate, 280const struct stat_data *sd) 281{ 282return(istate->timestamp.sec && 283#ifdef USE_NSEC 284/* nanosecond timestamped files can also be racy! */ 285(istate->timestamp.sec < sd->sd_mtime.sec || 286(istate->timestamp.sec == sd->sd_mtime.sec && 287 istate->timestamp.nsec <= sd->sd_mtime.nsec)) 288#else 289 istate->timestamp.sec <= sd->sd_mtime.sec 290#endif 291); 292} 293 294static intis_racy_timestamp(const struct index_state *istate, 295const struct cache_entry *ce) 296{ 297return(!S_ISGITLINK(ce->ce_mode) && 298is_racy_stat(istate, &ce->ce_stat_data)); 299} 300 301intmatch_stat_data_racy(const struct index_state *istate, 302const struct stat_data *sd,struct stat *st) 303{ 304if(is_racy_stat(istate, sd)) 305return MTIME_CHANGED; 306returnmatch_stat_data(sd, st); 307} 308 309intie_match_stat(struct index_state *istate, 310const struct cache_entry *ce,struct stat *st, 311unsigned int options) 312{ 313unsigned int changed; 314int ignore_valid = options & CE_MATCH_IGNORE_VALID; 315int ignore_skip_worktree = options & CE_MATCH_IGNORE_SKIP_WORKTREE; 316int assume_racy_is_modified = options & CE_MATCH_RACY_IS_DIRTY; 317int ignore_fsmonitor = options & CE_MATCH_IGNORE_FSMONITOR; 318 319if(!ignore_fsmonitor) 320refresh_fsmonitor(istate); 321/* 322 * If it's marked as always valid in the index, it's 323 * valid whatever the checked-out copy says. 324 * 325 * skip-worktree has the same effect with higher precedence 326 */ 327if(!ignore_skip_worktree &&ce_skip_worktree(ce)) 328return0; 329if(!ignore_valid && (ce->ce_flags & CE_VALID)) 330return0; 331if(!ignore_fsmonitor && (ce->ce_flags & CE_FSMONITOR_VALID)) 332return0; 333 334/* 335 * Intent-to-add entries have not been added, so the index entry 336 * by definition never matches what is in the work tree until it 337 * actually gets added. 338 */ 339if(ce_intent_to_add(ce)) 340return DATA_CHANGED | TYPE_CHANGED | MODE_CHANGED; 341 342 changed =ce_match_stat_basic(ce, st); 343 344/* 345 * Within 1 second of this sequence: 346 * echo xyzzy >file && git-update-index --add file 347 * running this command: 348 * echo frotz >file 349 * would give a falsely clean cache entry. The mtime and 350 * length match the cache, and other stat fields do not change. 351 * 352 * We could detect this at update-index time (the cache entry 353 * being registered/updated records the same time as "now") 354 * and delay the return from git-update-index, but that would 355 * effectively mean we can make at most one commit per second, 356 * which is not acceptable. Instead, we check cache entries 357 * whose mtime are the same as the index file timestamp more 358 * carefully than others. 359 */ 360if(!changed &&is_racy_timestamp(istate, ce)) { 361if(assume_racy_is_modified) 362 changed |= DATA_CHANGED; 363else 364 changed |=ce_modified_check_fs(ce, st); 365} 366 367return changed; 368} 369 370intie_modified(struct index_state *istate, 371const struct cache_entry *ce, 372struct stat *st,unsigned int options) 373{ 374int changed, changed_fs; 375 376 changed =ie_match_stat(istate, ce, st, options); 377if(!changed) 378return0; 379/* 380 * If the mode or type has changed, there's no point in trying 381 * to refresh the entry - it's not going to match 382 */ 383if(changed & (MODE_CHANGED | TYPE_CHANGED)) 384return changed; 385 386/* 387 * Immediately after read-tree or update-index --cacheinfo, 388 * the length field is zero, as we have never even read the 389 * lstat(2) information once, and we cannot trust DATA_CHANGED 390 * returned by ie_match_stat() which in turn was returned by 391 * ce_match_stat_basic() to signal that the filesize of the 392 * blob changed. We have to actually go to the filesystem to 393 * see if the contents match, and if so, should answer "unchanged". 394 * 395 * The logic does not apply to gitlinks, as ce_match_stat_basic() 396 * already has checked the actual HEAD from the filesystem in the 397 * subproject. If ie_match_stat() already said it is different, 398 * then we know it is. 399 */ 400if((changed & DATA_CHANGED) && 401(S_ISGITLINK(ce->ce_mode) || ce->ce_stat_data.sd_size !=0)) 402return changed; 403 404 changed_fs =ce_modified_check_fs(ce, st); 405if(changed_fs) 406return changed | changed_fs; 407return0; 408} 409 410intbase_name_compare(const char*name1,int len1,int mode1, 411const char*name2,int len2,int mode2) 412{ 413unsigned char c1, c2; 414int len = len1 < len2 ? len1 : len2; 415int cmp; 416 417 cmp =memcmp(name1, name2, len); 418if(cmp) 419return cmp; 420 c1 = name1[len]; 421 c2 = name2[len]; 422if(!c1 &&S_ISDIR(mode1)) 423 c1 ='/'; 424if(!c2 &&S_ISDIR(mode2)) 425 c2 ='/'; 426return(c1 < c2) ? -1: (c1 > c2) ?1:0; 427} 428 429/* 430 * df_name_compare() is identical to base_name_compare(), except it 431 * compares conflicting directory/file entries as equal. Note that 432 * while a directory name compares as equal to a regular file, they 433 * then individually compare _differently_ to a filename that has 434 * a dot after the basename (because '\0' < '.' < '/'). 435 * 436 * This is used by routines that want to traverse the git namespace 437 * but then handle conflicting entries together when possible. 438 */ 439intdf_name_compare(const char*name1,int len1,int mode1, 440const char*name2,int len2,int mode2) 441{ 442int len = len1 < len2 ? len1 : len2, cmp; 443unsigned char c1, c2; 444 445 cmp =memcmp(name1, name2, len); 446if(cmp) 447return cmp; 448/* Directories and files compare equal (same length, same name) */ 449if(len1 == len2) 450return0; 451 c1 = name1[len]; 452if(!c1 &&S_ISDIR(mode1)) 453 c1 ='/'; 454 c2 = name2[len]; 455if(!c2 &&S_ISDIR(mode2)) 456 c2 ='/'; 457if(c1 =='/'&& !c2) 458return0; 459if(c2 =='/'&& !c1) 460return0; 461return c1 - c2; 462} 463 464intname_compare(const char*name1,size_t len1,const char*name2,size_t len2) 465{ 466size_t min_len = (len1 < len2) ? len1 : len2; 467int cmp =memcmp(name1, name2, min_len); 468if(cmp) 469return cmp; 470if(len1 < len2) 471return-1; 472if(len1 > len2) 473return1; 474return0; 475} 476 477intcache_name_stage_compare(const char*name1,int len1,int stage1,const char*name2,int len2,int stage2) 478{ 479int cmp; 480 481 cmp =name_compare(name1, len1, name2, len2); 482if(cmp) 483return cmp; 484 485if(stage1 < stage2) 486return-1; 487if(stage1 > stage2) 488return1; 489return0; 490} 491 492static intindex_name_stage_pos(const struct index_state *istate,const char*name,int namelen,int stage) 493{ 494int first, last; 495 496 first =0; 497 last = istate->cache_nr; 498while(last > first) { 499int next = (last + first) >>1; 500struct cache_entry *ce = istate->cache[next]; 501int cmp =cache_name_stage_compare(name, namelen, stage, ce->name,ce_namelen(ce),ce_stage(ce)); 502if(!cmp) 503return next; 504if(cmp <0) { 505 last = next; 506continue; 507} 508 first = next+1; 509} 510return-first-1; 511} 512 513intindex_name_pos(const struct index_state *istate,const char*name,int namelen) 514{ 515returnindex_name_stage_pos(istate, name, namelen,0); 516} 517 518intremove_index_entry_at(struct index_state *istate,int pos) 519{ 520struct cache_entry *ce = istate->cache[pos]; 521 522record_resolve_undo(istate, ce); 523remove_name_hash(istate, ce); 524save_or_free_index_entry(istate, ce); 525 istate->cache_changed |= CE_ENTRY_REMOVED; 526 istate->cache_nr--; 527if(pos >= istate->cache_nr) 528return0; 529MOVE_ARRAY(istate->cache + pos, istate->cache + pos +1, 530 istate->cache_nr - pos); 531return1; 532} 533 534/* 535 * Remove all cache entries marked for removal, that is where 536 * CE_REMOVE is set in ce_flags. This is much more effective than 537 * calling remove_index_entry_at() for each entry to be removed. 538 */ 539voidremove_marked_cache_entries(struct index_state *istate) 540{ 541struct cache_entry **ce_array = istate->cache; 542unsigned int i, j; 543 544for(i = j =0; i < istate->cache_nr; i++) { 545if(ce_array[i]->ce_flags & CE_REMOVE) { 546remove_name_hash(istate, ce_array[i]); 547save_or_free_index_entry(istate, ce_array[i]); 548} 549else 550 ce_array[j++] = ce_array[i]; 551} 552if(j == istate->cache_nr) 553return; 554 istate->cache_changed |= CE_ENTRY_REMOVED; 555 istate->cache_nr = j; 556} 557 558intremove_file_from_index(struct index_state *istate,const char*path) 559{ 560int pos =index_name_pos(istate, path,strlen(path)); 561if(pos <0) 562 pos = -pos-1; 563cache_tree_invalidate_path(istate, path); 564untracked_cache_remove_from_index(istate, path); 565while(pos < istate->cache_nr && !strcmp(istate->cache[pos]->name, path)) 566remove_index_entry_at(istate, pos); 567return0; 568} 569 570static intcompare_name(struct cache_entry *ce,const char*path,int namelen) 571{ 572return namelen !=ce_namelen(ce) ||memcmp(path, ce->name, namelen); 573} 574 575static intindex_name_pos_also_unmerged(struct index_state *istate, 576const char*path,int namelen) 577{ 578int pos =index_name_pos(istate, path, namelen); 579struct cache_entry *ce; 580 581if(pos >=0) 582return pos; 583 584/* maybe unmerged? */ 585 pos = -1- pos; 586if(pos >= istate->cache_nr || 587compare_name((ce = istate->cache[pos]), path, namelen)) 588return-1; 589 590/* order of preference: stage 2, 1, 3 */ 591if(ce_stage(ce) ==1&& pos +1< istate->cache_nr && 592ce_stage((ce = istate->cache[pos +1])) ==2&& 593!compare_name(ce, path, namelen)) 594 pos++; 595return pos; 596} 597 598static intdifferent_name(struct cache_entry *ce,struct cache_entry *alias) 599{ 600int len =ce_namelen(ce); 601returnce_namelen(alias) != len ||memcmp(ce->name, alias->name, len); 602} 603 604/* 605 * If we add a filename that aliases in the cache, we will use the 606 * name that we already have - but we don't want to update the same 607 * alias twice, because that implies that there were actually two 608 * different files with aliasing names! 609 * 610 * So we use the CE_ADDED flag to verify that the alias was an old 611 * one before we accept it as 612 */ 613static struct cache_entry *create_alias_ce(struct index_state *istate, 614struct cache_entry *ce, 615struct cache_entry *alias) 616{ 617int len; 618struct cache_entry *new; 619 620if(alias->ce_flags & CE_ADDED) 621die("Will not add file alias '%s' ('%s' already exists in index)", ce->name, alias->name); 622 623/* Ok, create the new entry using the name of the existing alias */ 624 len =ce_namelen(alias); 625new=xcalloc(1,cache_entry_size(len)); 626memcpy(new->name, alias->name, len); 627copy_cache_entry(new, ce); 628save_or_free_index_entry(istate, ce); 629return new; 630} 631 632voidset_object_name_for_intent_to_add_entry(struct cache_entry *ce) 633{ 634unsigned char sha1[20]; 635if(write_sha1_file("",0, blob_type, sha1)) 636die("cannot create an empty blob in the object database"); 637hashcpy(ce->oid.hash, sha1); 638} 639 640intadd_to_index(struct index_state *istate,const char*path,struct stat *st,int flags) 641{ 642int size, namelen, was_same; 643 mode_t st_mode = st->st_mode; 644struct cache_entry *ce, *alias; 645unsigned ce_option = CE_MATCH_IGNORE_VALID|CE_MATCH_IGNORE_SKIP_WORKTREE|CE_MATCH_RACY_IS_DIRTY; 646int verbose = flags & (ADD_CACHE_VERBOSE | ADD_CACHE_PRETEND); 647int pretend = flags & ADD_CACHE_PRETEND; 648int intent_only = flags & ADD_CACHE_INTENT; 649int add_option = (ADD_CACHE_OK_TO_ADD|ADD_CACHE_OK_TO_REPLACE| 650(intent_only ? ADD_CACHE_NEW_ONLY :0)); 651 652if(!S_ISREG(st_mode) && !S_ISLNK(st_mode) && !S_ISDIR(st_mode)) 653returnerror("%s: can only add regular files, symbolic links or git-directories", path); 654 655 namelen =strlen(path); 656if(S_ISDIR(st_mode)) { 657while(namelen && path[namelen-1] =='/') 658 namelen--; 659} 660 size =cache_entry_size(namelen); 661 ce =xcalloc(1, size); 662memcpy(ce->name, path, namelen); 663 ce->ce_namelen = namelen; 664if(!intent_only) 665fill_stat_cache_info(ce, st); 666else 667 ce->ce_flags |= CE_INTENT_TO_ADD; 668 669 670if(trust_executable_bit && has_symlinks) { 671 ce->ce_mode =create_ce_mode(st_mode); 672}else{ 673/* If there is an existing entry, pick the mode bits and type 674 * from it, otherwise assume unexecutable regular file. 675 */ 676struct cache_entry *ent; 677int pos =index_name_pos_also_unmerged(istate, path, namelen); 678 679 ent = (0<= pos) ? istate->cache[pos] : NULL; 680 ce->ce_mode =ce_mode_from_stat(ent, st_mode); 681} 682 683/* When core.ignorecase=true, determine if a directory of the same name but differing 684 * case already exists within the Git repository. If it does, ensure the directory 685 * case of the file being added to the repository matches (is folded into) the existing 686 * entry's directory case. 687 */ 688if(ignore_case) { 689adjust_dirname_case(istate, ce->name); 690} 691 692 alias =index_file_exists(istate, ce->name,ce_namelen(ce), ignore_case); 693if(alias && !ce_stage(alias) && !ie_match_stat(istate, alias, st, ce_option)) { 694/* Nothing changed, really */ 695if(!S_ISGITLINK(alias->ce_mode)) 696ce_mark_uptodate(alias); 697 alias->ce_flags |= CE_ADDED; 698 699free(ce); 700return0; 701} 702if(!intent_only) { 703if(index_path(&ce->oid, path, st, HASH_WRITE_OBJECT)) { 704free(ce); 705returnerror("unable to index file%s", path); 706} 707}else 708set_object_name_for_intent_to_add_entry(ce); 709 710if(ignore_case && alias &&different_name(ce, alias)) 711 ce =create_alias_ce(istate, ce, alias); 712 ce->ce_flags |= CE_ADDED; 713 714/* It was suspected to be racily clean, but it turns out to be Ok */ 715 was_same = (alias && 716!ce_stage(alias) && 717!oidcmp(&alias->oid, &ce->oid) && 718 ce->ce_mode == alias->ce_mode); 719 720if(pretend) 721free(ce); 722else if(add_index_entry(istate, ce, add_option)) { 723free(ce); 724returnerror("unable to add%sto index", path); 725} 726if(verbose && !was_same) 727printf("add '%s'\n", path); 728return0; 729} 730 731intadd_file_to_index(struct index_state *istate,const char*path,int flags) 732{ 733struct stat st; 734if(lstat(path, &st)) 735die_errno("unable to stat '%s'", path); 736returnadd_to_index(istate, path, &st, flags); 737} 738 739struct cache_entry *make_cache_entry(unsigned int mode, 740const unsigned char*sha1,const char*path,int stage, 741unsigned int refresh_options) 742{ 743int size, len; 744struct cache_entry *ce, *ret; 745 746if(!verify_path(path)) { 747error("Invalid path '%s'", path); 748return NULL; 749} 750 751 len =strlen(path); 752 size =cache_entry_size(len); 753 ce =xcalloc(1, size); 754 755hashcpy(ce->oid.hash, sha1); 756memcpy(ce->name, path, len); 757 ce->ce_flags =create_ce_flags(stage); 758 ce->ce_namelen = len; 759 ce->ce_mode =create_ce_mode(mode); 760 761 ret =refresh_cache_entry(ce, refresh_options); 762if(ret != ce) 763free(ce); 764return ret; 765} 766 767/* 768 * Chmod an index entry with either +x or -x. 769 * 770 * Returns -1 if the chmod for the particular cache entry failed (if it's 771 * not a regular file), -2 if an invalid flip argument is passed in, 0 772 * otherwise. 773 */ 774intchmod_index_entry(struct index_state *istate,struct cache_entry *ce, 775char flip) 776{ 777if(!S_ISREG(ce->ce_mode)) 778return-1; 779switch(flip) { 780case'+': 781 ce->ce_mode |=0111; 782break; 783case'-': 784 ce->ce_mode &= ~0111; 785break; 786default: 787return-2; 788} 789cache_tree_invalidate_path(istate, ce->name); 790 ce->ce_flags |= CE_UPDATE_IN_BASE; 791mark_fsmonitor_invalid(istate, ce); 792 istate->cache_changed |= CE_ENTRY_CHANGED; 793 794return0; 795} 796 797intce_same_name(const struct cache_entry *a,const struct cache_entry *b) 798{ 799int len =ce_namelen(a); 800returnce_namelen(b) == len && !memcmp(a->name, b->name, len); 801} 802 803/* 804 * We fundamentally don't like some paths: we don't want 805 * dot or dot-dot anywhere, and for obvious reasons don't 806 * want to recurse into ".git" either. 807 * 808 * Also, we don't want double slashes or slashes at the 809 * end that can make pathnames ambiguous. 810 */ 811static intverify_dotfile(const char*rest) 812{ 813/* 814 * The first character was '.', but that 815 * has already been discarded, we now test 816 * the rest. 817 */ 818 819/* "." is not allowed */ 820if(*rest =='\0'||is_dir_sep(*rest)) 821return0; 822 823switch(*rest) { 824/* 825 * ".git" followed by NUL or slash is bad. This 826 * shares the path end test with the ".." case. 827 */ 828case'g': 829case'G': 830if(rest[1] !='i'&& rest[1] !='I') 831break; 832if(rest[2] !='t'&& rest[2] !='T') 833break; 834 rest +=2; 835/* fallthrough */ 836case'.': 837if(rest[1] =='\0'||is_dir_sep(rest[1])) 838return0; 839} 840return1; 841} 842 843intverify_path(const char*path) 844{ 845char c; 846 847if(has_dos_drive_prefix(path)) 848return0; 849 850goto inside; 851for(;;) { 852if(!c) 853return1; 854if(is_dir_sep(c)) { 855inside: 856if(protect_hfs &&is_hfs_dotgit(path)) 857return0; 858if(protect_ntfs &&is_ntfs_dotgit(path)) 859return0; 860 c = *path++; 861if((c =='.'&& !verify_dotfile(path)) || 862is_dir_sep(c) || c =='\0') 863return0; 864} 865 c = *path++; 866} 867} 868 869/* 870 * Do we have another file that has the beginning components being a 871 * proper superset of the name we're trying to add? 872 */ 873static inthas_file_name(struct index_state *istate, 874const struct cache_entry *ce,int pos,int ok_to_replace) 875{ 876int retval =0; 877int len =ce_namelen(ce); 878int stage =ce_stage(ce); 879const char*name = ce->name; 880 881while(pos < istate->cache_nr) { 882struct cache_entry *p = istate->cache[pos++]; 883 884if(len >=ce_namelen(p)) 885break; 886if(memcmp(name, p->name, len)) 887break; 888if(ce_stage(p) != stage) 889continue; 890if(p->name[len] !='/') 891continue; 892if(p->ce_flags & CE_REMOVE) 893continue; 894 retval = -1; 895if(!ok_to_replace) 896break; 897remove_index_entry_at(istate, --pos); 898} 899return retval; 900} 901 902 903/* 904 * Like strcmp(), but also return the offset of the first change. 905 * If strings are equal, return the length. 906 */ 907intstrcmp_offset(const char*s1,const char*s2,size_t*first_change) 908{ 909size_t k; 910 911if(!first_change) 912returnstrcmp(s1, s2); 913 914for(k =0; s1[k] == s2[k]; k++) 915if(s1[k] =='\0') 916break; 917 918*first_change = k; 919return(unsigned char)s1[k] - (unsigned char)s2[k]; 920} 921 922/* 923 * Do we have another file with a pathname that is a proper 924 * subset of the name we're trying to add? 925 * 926 * That is, is there another file in the index with a path 927 * that matches a sub-directory in the given entry? 928 */ 929static inthas_dir_name(struct index_state *istate, 930const struct cache_entry *ce,int pos,int ok_to_replace) 931{ 932int retval =0; 933int stage =ce_stage(ce); 934const char*name = ce->name; 935const char*slash = name +ce_namelen(ce); 936size_t len_eq_last; 937int cmp_last =0; 938 939/* 940 * We are frequently called during an iteration on a sorted 941 * list of pathnames and while building a new index. Therefore, 942 * there is a high probability that this entry will eventually 943 * be appended to the index, rather than inserted in the middle. 944 * If we can confirm that, we can avoid binary searches on the 945 * components of the pathname. 946 * 947 * Compare the entry's full path with the last path in the index. 948 */ 949if(istate->cache_nr >0) { 950 cmp_last =strcmp_offset(name, 951 istate->cache[istate->cache_nr -1]->name, 952&len_eq_last); 953if(cmp_last >0) { 954if(len_eq_last ==0) { 955/* 956 * The entry sorts AFTER the last one in the 957 * index and their paths have no common prefix, 958 * so there cannot be a F/D conflict. 959 */ 960return retval; 961}else{ 962/* 963 * The entry sorts AFTER the last one in the 964 * index, but has a common prefix. Fall through 965 * to the loop below to disect the entry's path 966 * and see where the difference is. 967 */ 968} 969}else if(cmp_last ==0) { 970/* 971 * The entry exactly matches the last one in the 972 * index, but because of multiple stage and CE_REMOVE 973 * items, we fall through and let the regular search 974 * code handle it. 975 */ 976} 977} 978 979for(;;) { 980size_t len; 981 982for(;;) { 983if(*--slash =='/') 984break; 985if(slash <= ce->name) 986return retval; 987} 988 len = slash - name; 989 990if(cmp_last >0) { 991/* 992 * (len + 1) is a directory boundary (including 993 * the trailing slash). And since the loop is 994 * decrementing "slash", the first iteration is 995 * the longest directory prefix; subsequent 996 * iterations consider parent directories. 997 */ 998 999if(len +1<= len_eq_last) {1000/*1001 * The directory prefix (including the trailing1002 * slash) also appears as a prefix in the last1003 * entry, so the remainder cannot collide (because1004 * strcmp said the whole path was greater).1005 *1006 * EQ: last: xxx/A1007 * this: xxx/B1008 *1009 * LT: last: xxx/file_A1010 * this: xxx/file_B1011 */1012return retval;1013}10141015if(len > len_eq_last) {1016/*1017 * This part of the directory prefix (excluding1018 * the trailing slash) is longer than the known1019 * equal portions, so this sub-directory cannot1020 * collide with a file.1021 *1022 * GT: last: xxxA1023 * this: xxxB/file1024 */1025return retval;1026}10271028if(istate->cache_nr >0&&1029ce_namelen(istate->cache[istate->cache_nr -1]) > len) {1030/*1031 * The directory prefix lines up with part of1032 * a longer file or directory name, but sorts1033 * after it, so this sub-directory cannot1034 * collide with a file.1035 *1036 * last: xxx/yy-file (because '-' sorts before '/')1037 * this: xxx/yy/abc1038 */1039return retval;1040}10411042/*1043 * This is a possible collision. Fall through and1044 * let the regular search code handle it.1045 *1046 * last: xxx1047 * this: xxx/file1048 */1049}10501051 pos =index_name_stage_pos(istate, name, len, stage);1052if(pos >=0) {1053/*1054 * Found one, but not so fast. This could1055 * be a marker that says "I was here, but1056 * I am being removed". Such an entry is1057 * not a part of the resulting tree, and1058 * it is Ok to have a directory at the same1059 * path.1060 */1061if(!(istate->cache[pos]->ce_flags & CE_REMOVE)) {1062 retval = -1;1063if(!ok_to_replace)1064break;1065remove_index_entry_at(istate, pos);1066continue;1067}1068}1069else1070 pos = -pos-1;10711072/*1073 * Trivial optimization: if we find an entry that1074 * already matches the sub-directory, then we know1075 * we're ok, and we can exit.1076 */1077while(pos < istate->cache_nr) {1078struct cache_entry *p = istate->cache[pos];1079if((ce_namelen(p) <= len) ||1080(p->name[len] !='/') ||1081memcmp(p->name, name, len))1082break;/* not our subdirectory */1083if(ce_stage(p) == stage && !(p->ce_flags & CE_REMOVE))1084/*1085 * p is at the same stage as our entry, and1086 * is a subdirectory of what we are looking1087 * at, so we cannot have conflicts at our1088 * level or anything shorter.1089 */1090return retval;1091 pos++;1092}1093}1094return retval;1095}10961097/* We may be in a situation where we already have path/file and path1098 * is being added, or we already have path and path/file is being1099 * added. Either one would result in a nonsense tree that has path1100 * twice when git-write-tree tries to write it out. Prevent it.1101 *1102 * If ok-to-replace is specified, we remove the conflicting entries1103 * from the cache so the caller should recompute the insert position.1104 * When this happens, we return non-zero.1105 */1106static intcheck_file_directory_conflict(struct index_state *istate,1107const struct cache_entry *ce,1108int pos,int ok_to_replace)1109{1110int retval;11111112/*1113 * When ce is an "I am going away" entry, we allow it to be added1114 */1115if(ce->ce_flags & CE_REMOVE)1116return0;11171118/*1119 * We check if the path is a sub-path of a subsequent pathname1120 * first, since removing those will not change the position1121 * in the array.1122 */1123 retval =has_file_name(istate, ce, pos, ok_to_replace);11241125/*1126 * Then check if the path might have a clashing sub-directory1127 * before it.1128 */1129return retval +has_dir_name(istate, ce, pos, ok_to_replace);1130}11311132static intadd_index_entry_with_check(struct index_state *istate,struct cache_entry *ce,int option)1133{1134int pos;1135int ok_to_add = option & ADD_CACHE_OK_TO_ADD;1136int ok_to_replace = option & ADD_CACHE_OK_TO_REPLACE;1137int skip_df_check = option & ADD_CACHE_SKIP_DFCHECK;1138int new_only = option & ADD_CACHE_NEW_ONLY;11391140if(!(option & ADD_CACHE_KEEP_CACHE_TREE))1141cache_tree_invalidate_path(istate, ce->name);11421143/*1144 * If this entry's path sorts after the last entry in the index,1145 * we can avoid searching for it.1146 */1147if(istate->cache_nr >0&&1148strcmp(ce->name, istate->cache[istate->cache_nr -1]->name) >0)1149 pos = -istate->cache_nr -1;1150else1151 pos =index_name_stage_pos(istate, ce->name,ce_namelen(ce),ce_stage(ce));11521153/* existing match? Just replace it. */1154if(pos >=0) {1155if(!new_only)1156replace_index_entry(istate, pos, ce);1157return0;1158}1159 pos = -pos-1;11601161if(!(option & ADD_CACHE_KEEP_CACHE_TREE))1162untracked_cache_add_to_index(istate, ce->name);11631164/*1165 * Inserting a merged entry ("stage 0") into the index1166 * will always replace all non-merged entries..1167 */1168if(pos < istate->cache_nr &&ce_stage(ce) ==0) {1169while(ce_same_name(istate->cache[pos], ce)) {1170 ok_to_add =1;1171if(!remove_index_entry_at(istate, pos))1172break;1173}1174}11751176if(!ok_to_add)1177return-1;1178if(!verify_path(ce->name))1179returnerror("Invalid path '%s'", ce->name);11801181if(!skip_df_check &&1182check_file_directory_conflict(istate, ce, pos, ok_to_replace)) {1183if(!ok_to_replace)1184returnerror("'%s' appears as both a file and as a directory",1185 ce->name);1186 pos =index_name_stage_pos(istate, ce->name,ce_namelen(ce),ce_stage(ce));1187 pos = -pos-1;1188}1189return pos +1;1190}11911192intadd_index_entry(struct index_state *istate,struct cache_entry *ce,int option)1193{1194int pos;11951196if(option & ADD_CACHE_JUST_APPEND)1197 pos = istate->cache_nr;1198else{1199int ret;1200 ret =add_index_entry_with_check(istate, ce, option);1201if(ret <=0)1202return ret;1203 pos = ret -1;1204}12051206/* Make sure the array is big enough .. */1207ALLOC_GROW(istate->cache, istate->cache_nr +1, istate->cache_alloc);12081209/* Add it in.. */1210 istate->cache_nr++;1211if(istate->cache_nr > pos +1)1212memmove(istate->cache + pos +1,1213 istate->cache + pos,1214(istate->cache_nr - pos -1) *sizeof(ce));1215set_index_entry(istate, pos, ce);1216 istate->cache_changed |= CE_ENTRY_ADDED;1217return0;1218}12191220/*1221 * "refresh" does not calculate a new sha1 file or bring the1222 * cache up-to-date for mode/content changes. But what it1223 * _does_ do is to "re-match" the stat information of a file1224 * with the cache, so that you can refresh the cache for a1225 * file that hasn't been changed but where the stat entry is1226 * out of date.1227 *1228 * For example, you'd want to do this after doing a "git-read-tree",1229 * to link up the stat cache details with the proper files.1230 */1231static struct cache_entry *refresh_cache_ent(struct index_state *istate,1232struct cache_entry *ce,1233unsigned int options,int*err,1234int*changed_ret)1235{1236struct stat st;1237struct cache_entry *updated;1238int changed, size;1239int refresh = options & CE_MATCH_REFRESH;1240int ignore_valid = options & CE_MATCH_IGNORE_VALID;1241int ignore_skip_worktree = options & CE_MATCH_IGNORE_SKIP_WORKTREE;1242int ignore_missing = options & CE_MATCH_IGNORE_MISSING;1243int ignore_fsmonitor = options & CE_MATCH_IGNORE_FSMONITOR;12441245if(!refresh ||ce_uptodate(ce))1246return ce;12471248if(!ignore_fsmonitor)1249refresh_fsmonitor(istate);1250/*1251 * CE_VALID or CE_SKIP_WORKTREE means the user promised us1252 * that the change to the work tree does not matter and told1253 * us not to worry.1254 */1255if(!ignore_skip_worktree &&ce_skip_worktree(ce)) {1256ce_mark_uptodate(ce);1257return ce;1258}1259if(!ignore_valid && (ce->ce_flags & CE_VALID)) {1260ce_mark_uptodate(ce);1261return ce;1262}1263if(!ignore_fsmonitor && (ce->ce_flags & CE_FSMONITOR_VALID)) {1264ce_mark_uptodate(ce);1265return ce;1266}12671268if(has_symlink_leading_path(ce->name,ce_namelen(ce))) {1269if(ignore_missing)1270return ce;1271if(err)1272*err = ENOENT;1273return NULL;1274}12751276if(lstat(ce->name, &st) <0) {1277if(ignore_missing && errno == ENOENT)1278return ce;1279if(err)1280*err = errno;1281return NULL;1282}12831284 changed =ie_match_stat(istate, ce, &st, options);1285if(changed_ret)1286*changed_ret = changed;1287if(!changed) {1288/*1289 * The path is unchanged. If we were told to ignore1290 * valid bit, then we did the actual stat check and1291 * found that the entry is unmodified. If the entry1292 * is not marked VALID, this is the place to mark it1293 * valid again, under "assume unchanged" mode.1294 */1295if(ignore_valid && assume_unchanged &&1296!(ce->ce_flags & CE_VALID))1297;/* mark this one VALID again */1298else{1299/*1300 * We do not mark the index itself "modified"1301 * because CE_UPTODATE flag is in-core only;1302 * we are not going to write this change out.1303 */1304if(!S_ISGITLINK(ce->ce_mode)) {1305ce_mark_uptodate(ce);1306mark_fsmonitor_valid(ce);1307}1308return ce;1309}1310}13111312if(ie_modified(istate, ce, &st, options)) {1313if(err)1314*err = EINVAL;1315return NULL;1316}13171318 size =ce_size(ce);1319 updated =xmalloc(size);1320memcpy(updated, ce, size);1321fill_stat_cache_info(updated, &st);1322/*1323 * If ignore_valid is not set, we should leave CE_VALID bit1324 * alone. Otherwise, paths marked with --no-assume-unchanged1325 * (i.e. things to be edited) will reacquire CE_VALID bit1326 * automatically, which is not really what we want.1327 */1328if(!ignore_valid && assume_unchanged &&1329!(ce->ce_flags & CE_VALID))1330 updated->ce_flags &= ~CE_VALID;13311332/* istate->cache_changed is updated in the caller */1333return updated;1334}13351336static voidshow_file(const char* fmt,const char* name,int in_porcelain,1337int* first,const char*header_msg)1338{1339if(in_porcelain && *first && header_msg) {1340printf("%s\n", header_msg);1341*first =0;1342}1343printf(fmt, name);1344}13451346intrefresh_index(struct index_state *istate,unsigned int flags,1347const struct pathspec *pathspec,1348char*seen,const char*header_msg)1349{1350int i;1351int has_errors =0;1352int really = (flags & REFRESH_REALLY) !=0;1353int allow_unmerged = (flags & REFRESH_UNMERGED) !=0;1354int quiet = (flags & REFRESH_QUIET) !=0;1355int not_new = (flags & REFRESH_IGNORE_MISSING) !=0;1356int ignore_submodules = (flags & REFRESH_IGNORE_SUBMODULES) !=0;1357int first =1;1358int in_porcelain = (flags & REFRESH_IN_PORCELAIN);1359unsigned int options = (CE_MATCH_REFRESH |1360(really ? CE_MATCH_IGNORE_VALID :0) |1361(not_new ? CE_MATCH_IGNORE_MISSING :0));1362const char*modified_fmt;1363const char*deleted_fmt;1364const char*typechange_fmt;1365const char*added_fmt;1366const char*unmerged_fmt;13671368 modified_fmt = (in_porcelain ?"M\t%s\n":"%s: needs update\n");1369 deleted_fmt = (in_porcelain ?"D\t%s\n":"%s: needs update\n");1370 typechange_fmt = (in_porcelain ?"T\t%s\n":"%sneeds update\n");1371 added_fmt = (in_porcelain ?"A\t%s\n":"%sneeds update\n");1372 unmerged_fmt = (in_porcelain ?"U\t%s\n":"%s: needs merge\n");1373for(i =0; i < istate->cache_nr; i++) {1374struct cache_entry *ce, *new;1375int cache_errno =0;1376int changed =0;1377int filtered =0;13781379 ce = istate->cache[i];1380if(ignore_submodules &&S_ISGITLINK(ce->ce_mode))1381continue;13821383if(pathspec && !ce_path_match(ce, pathspec, seen))1384 filtered =1;13851386if(ce_stage(ce)) {1387while((i < istate->cache_nr) &&1388!strcmp(istate->cache[i]->name, ce->name))1389 i++;1390 i--;1391if(allow_unmerged)1392continue;1393if(!filtered)1394show_file(unmerged_fmt, ce->name, in_porcelain,1395&first, header_msg);1396 has_errors =1;1397continue;1398}13991400if(filtered)1401continue;14021403new=refresh_cache_ent(istate, ce, options, &cache_errno, &changed);1404if(new== ce)1405continue;1406if(!new) {1407const char*fmt;14081409if(really && cache_errno == EINVAL) {1410/* If we are doing --really-refresh that1411 * means the index is not valid anymore.1412 */1413 ce->ce_flags &= ~CE_VALID;1414 ce->ce_flags |= CE_UPDATE_IN_BASE;1415mark_fsmonitor_invalid(istate, ce);1416 istate->cache_changed |= CE_ENTRY_CHANGED;1417}1418if(quiet)1419continue;14201421if(cache_errno == ENOENT)1422 fmt = deleted_fmt;1423else if(ce_intent_to_add(ce))1424 fmt = added_fmt;/* must be before other checks */1425else if(changed & TYPE_CHANGED)1426 fmt = typechange_fmt;1427else1428 fmt = modified_fmt;1429show_file(fmt,1430 ce->name, in_porcelain, &first, header_msg);1431 has_errors =1;1432continue;1433}14341435replace_index_entry(istate, i,new);1436}1437return has_errors;1438}14391440struct cache_entry *refresh_cache_entry(struct cache_entry *ce,1441unsigned int options)1442{1443returnrefresh_cache_ent(&the_index, ce, options, NULL, NULL);1444}144514461447/*****************************************************************1448 * Index File I/O1449 *****************************************************************/14501451#define INDEX_FORMAT_DEFAULT 314521453static unsigned intget_index_format_default(void)1454{1455char*envversion =getenv("GIT_INDEX_VERSION");1456char*endp;1457int value;1458unsigned int version = INDEX_FORMAT_DEFAULT;14591460if(!envversion) {1461if(!git_config_get_int("index.version", &value))1462 version = value;1463if(version < INDEX_FORMAT_LB || INDEX_FORMAT_UB < version) {1464warning(_("index.version set, but the value is invalid.\n"1465"Using version%i"), INDEX_FORMAT_DEFAULT);1466return INDEX_FORMAT_DEFAULT;1467}1468return version;1469}14701471 version =strtoul(envversion, &endp,10);1472if(*endp ||1473 version < INDEX_FORMAT_LB || INDEX_FORMAT_UB < version) {1474warning(_("GIT_INDEX_VERSION set, but the value is invalid.\n"1475"Using version%i"), INDEX_FORMAT_DEFAULT);1476 version = INDEX_FORMAT_DEFAULT;1477}1478return version;1479}14801481/*1482 * dev/ino/uid/gid/size are also just tracked to the low 32 bits1483 * Again - this is just a (very strong in practice) heuristic that1484 * the inode hasn't changed.1485 *1486 * We save the fields in big-endian order to allow using the1487 * index file over NFS transparently.1488 */1489struct ondisk_cache_entry {1490struct cache_time ctime;1491struct cache_time mtime;1492uint32_t dev;1493uint32_t ino;1494uint32_t mode;1495uint32_t uid;1496uint32_t gid;1497uint32_t size;1498unsigned char sha1[20];1499uint16_t flags;1500char name[FLEX_ARRAY];/* more */1501};15021503/*1504 * This struct is used when CE_EXTENDED bit is 11505 * The struct must match ondisk_cache_entry exactly from1506 * ctime till flags1507 */1508struct ondisk_cache_entry_extended {1509struct cache_time ctime;1510struct cache_time mtime;1511uint32_t dev;1512uint32_t ino;1513uint32_t mode;1514uint32_t uid;1515uint32_t gid;1516uint32_t size;1517unsigned char sha1[20];1518uint16_t flags;1519uint16_t flags2;1520char name[FLEX_ARRAY];/* more */1521};15221523/* These are only used for v3 or lower */1524#define align_padding_size(size, len) ((size + (len) + 8) & ~7) - (size + len)1525#define align_flex_name(STRUCT,len) ((offsetof(struct STRUCT,name) + (len) + 8) & ~7)1526#define ondisk_cache_entry_size(len) align_flex_name(ondisk_cache_entry,len)1527#define ondisk_cache_entry_extended_size(len) align_flex_name(ondisk_cache_entry_extended,len)1528#define ondisk_ce_size(ce) (((ce)->ce_flags & CE_EXTENDED) ? \1529 ondisk_cache_entry_extended_size(ce_namelen(ce)) : \1530 ondisk_cache_entry_size(ce_namelen(ce)))15311532/* Allow fsck to force verification of the index checksum. */1533int verify_index_checksum;15341535/* Allow fsck to force verification of the cache entry order. */1536int verify_ce_order;15371538static intverify_hdr(struct cache_header *hdr,unsigned long size)1539{1540 git_SHA_CTX c;1541unsigned char sha1[20];1542int hdr_version;15431544if(hdr->hdr_signature !=htonl(CACHE_SIGNATURE))1545returnerror("bad signature");1546 hdr_version =ntohl(hdr->hdr_version);1547if(hdr_version < INDEX_FORMAT_LB || INDEX_FORMAT_UB < hdr_version)1548returnerror("bad index version%d", hdr_version);15491550if(!verify_index_checksum)1551return0;15521553git_SHA1_Init(&c);1554git_SHA1_Update(&c, hdr, size -20);1555git_SHA1_Final(sha1, &c);1556if(hashcmp(sha1, (unsigned char*)hdr + size -20))1557returnerror("bad index file sha1 signature");1558return0;1559}15601561static intread_index_extension(struct index_state *istate,1562const char*ext,void*data,unsigned long sz)1563{1564switch(CACHE_EXT(ext)) {1565case CACHE_EXT_TREE:1566 istate->cache_tree =cache_tree_read(data, sz);1567break;1568case CACHE_EXT_RESOLVE_UNDO:1569 istate->resolve_undo =resolve_undo_read(data, sz);1570break;1571case CACHE_EXT_LINK:1572if(read_link_extension(istate, data, sz))1573return-1;1574break;1575case CACHE_EXT_UNTRACKED:1576 istate->untracked =read_untracked_extension(data, sz);1577break;1578case CACHE_EXT_FSMONITOR:1579read_fsmonitor_extension(istate, data, sz);1580break;1581default:1582if(*ext <'A'||'Z'< *ext)1583returnerror("index uses %.4s extension, which we do not understand",1584 ext);1585fprintf(stderr,"ignoring %.4s extension\n", ext);1586break;1587}1588return0;1589}15901591inthold_locked_index(struct lock_file *lk,int lock_flags)1592{1593returnhold_lock_file_for_update(lk,get_index_file(), lock_flags);1594}15951596intread_index(struct index_state *istate)1597{1598returnread_index_from(istate,get_index_file());1599}16001601static struct cache_entry *cache_entry_from_ondisk(struct ondisk_cache_entry *ondisk,1602unsigned int flags,1603const char*name,1604size_t len)1605{1606struct cache_entry *ce =xmalloc(cache_entry_size(len));16071608 ce->ce_stat_data.sd_ctime.sec =get_be32(&ondisk->ctime.sec);1609 ce->ce_stat_data.sd_mtime.sec =get_be32(&ondisk->mtime.sec);1610 ce->ce_stat_data.sd_ctime.nsec =get_be32(&ondisk->ctime.nsec);1611 ce->ce_stat_data.sd_mtime.nsec =get_be32(&ondisk->mtime.nsec);1612 ce->ce_stat_data.sd_dev =get_be32(&ondisk->dev);1613 ce->ce_stat_data.sd_ino =get_be32(&ondisk->ino);1614 ce->ce_mode =get_be32(&ondisk->mode);1615 ce->ce_stat_data.sd_uid =get_be32(&ondisk->uid);1616 ce->ce_stat_data.sd_gid =get_be32(&ondisk->gid);1617 ce->ce_stat_data.sd_size =get_be32(&ondisk->size);1618 ce->ce_flags = flags & ~CE_NAMEMASK;1619 ce->ce_namelen = len;1620 ce->index =0;1621hashcpy(ce->oid.hash, ondisk->sha1);1622memcpy(ce->name, name, len);1623 ce->name[len] ='\0';1624return ce;1625}16261627/*1628 * Adjacent cache entries tend to share the leading paths, so it makes1629 * sense to only store the differences in later entries. In the v41630 * on-disk format of the index, each on-disk cache entry stores the1631 * number of bytes to be stripped from the end of the previous name,1632 * and the bytes to append to the result, to come up with its name.1633 */1634static unsigned longexpand_name_field(struct strbuf *name,const char*cp_)1635{1636const unsigned char*ep, *cp = (const unsigned char*)cp_;1637size_t len =decode_varint(&cp);16381639if(name->len < len)1640die("malformed name field in the index");1641strbuf_remove(name, name->len - len, len);1642for(ep = cp; *ep; ep++)1643;/* find the end */1644strbuf_add(name, cp, ep - cp);1645return(const char*)ep +1- cp_;1646}16471648static struct cache_entry *create_from_disk(struct ondisk_cache_entry *ondisk,1649unsigned long*ent_size,1650struct strbuf *previous_name)1651{1652struct cache_entry *ce;1653size_t len;1654const char*name;1655unsigned int flags;16561657/* On-disk flags are just 16 bits */1658 flags =get_be16(&ondisk->flags);1659 len = flags & CE_NAMEMASK;16601661if(flags & CE_EXTENDED) {1662struct ondisk_cache_entry_extended *ondisk2;1663int extended_flags;1664 ondisk2 = (struct ondisk_cache_entry_extended *)ondisk;1665 extended_flags =get_be16(&ondisk2->flags2) <<16;1666/* We do not yet understand any bit out of CE_EXTENDED_FLAGS */1667if(extended_flags & ~CE_EXTENDED_FLAGS)1668die("Unknown index entry format%08x", extended_flags);1669 flags |= extended_flags;1670 name = ondisk2->name;1671}1672else1673 name = ondisk->name;16741675if(!previous_name) {1676/* v3 and earlier */1677if(len == CE_NAMEMASK)1678 len =strlen(name);1679 ce =cache_entry_from_ondisk(ondisk, flags, name, len);16801681*ent_size =ondisk_ce_size(ce);1682}else{1683unsigned long consumed;1684 consumed =expand_name_field(previous_name, name);1685 ce =cache_entry_from_ondisk(ondisk, flags,1686 previous_name->buf,1687 previous_name->len);16881689*ent_size = (name - ((char*)ondisk)) + consumed;1690}1691return ce;1692}16931694static voidcheck_ce_order(struct index_state *istate)1695{1696unsigned int i;16971698if(!verify_ce_order)1699return;17001701for(i =1; i < istate->cache_nr; i++) {1702struct cache_entry *ce = istate->cache[i -1];1703struct cache_entry *next_ce = istate->cache[i];1704int name_compare =strcmp(ce->name, next_ce->name);17051706if(0< name_compare)1707die("unordered stage entries in index");1708if(!name_compare) {1709if(!ce_stage(ce))1710die("multiple stage entries for merged file '%s'",1711 ce->name);1712if(ce_stage(ce) >ce_stage(next_ce))1713die("unordered stage entries for '%s'",1714 ce->name);1715}1716}1717}17181719static voidtweak_untracked_cache(struct index_state *istate)1720{1721switch(git_config_get_untracked_cache()) {1722case-1:/* keep: do nothing */1723break;1724case0:/* false */1725remove_untracked_cache(istate);1726break;1727case1:/* true */1728add_untracked_cache(istate);1729break;1730default:/* unknown value: do nothing */1731break;1732}1733}17341735static voidtweak_split_index(struct index_state *istate)1736{1737switch(git_config_get_split_index()) {1738case-1:/* unset: do nothing */1739break;1740case0:/* false */1741remove_split_index(istate);1742break;1743case1:/* true */1744add_split_index(istate);1745break;1746default:/* unknown value: do nothing */1747break;1748}1749}17501751static voidpost_read_index_from(struct index_state *istate)1752{1753check_ce_order(istate);1754tweak_untracked_cache(istate);1755tweak_split_index(istate);1756tweak_fsmonitor(istate);1757}17581759/* remember to discard_cache() before reading a different cache! */1760intdo_read_index(struct index_state *istate,const char*path,int must_exist)1761{1762int fd, i;1763struct stat st;1764unsigned long src_offset;1765struct cache_header *hdr;1766void*mmap;1767size_t mmap_size;1768struct strbuf previous_name_buf = STRBUF_INIT, *previous_name;17691770if(istate->initialized)1771return istate->cache_nr;17721773 istate->timestamp.sec =0;1774 istate->timestamp.nsec =0;1775 fd =open(path, O_RDONLY);1776if(fd <0) {1777if(!must_exist && errno == ENOENT)1778return0;1779die_errno("%s: index file open failed", path);1780}17811782if(fstat(fd, &st))1783die_errno("cannot stat the open index");17841785 mmap_size =xsize_t(st.st_size);1786if(mmap_size <sizeof(struct cache_header) +20)1787die("index file smaller than expected");17881789 mmap =xmmap(NULL, mmap_size, PROT_READ, MAP_PRIVATE, fd,0);1790if(mmap == MAP_FAILED)1791die_errno("unable to map index file");1792close(fd);17931794 hdr = mmap;1795if(verify_hdr(hdr, mmap_size) <0)1796goto unmap;17971798hashcpy(istate->sha1, (const unsigned char*)hdr + mmap_size -20);1799 istate->version =ntohl(hdr->hdr_version);1800 istate->cache_nr =ntohl(hdr->hdr_entries);1801 istate->cache_alloc =alloc_nr(istate->cache_nr);1802 istate->cache =xcalloc(istate->cache_alloc,sizeof(*istate->cache));1803 istate->initialized =1;18041805if(istate->version ==4)1806 previous_name = &previous_name_buf;1807else1808 previous_name = NULL;18091810 src_offset =sizeof(*hdr);1811for(i =0; i < istate->cache_nr; i++) {1812struct ondisk_cache_entry *disk_ce;1813struct cache_entry *ce;1814unsigned long consumed;18151816 disk_ce = (struct ondisk_cache_entry *)((char*)mmap + src_offset);1817 ce =create_from_disk(disk_ce, &consumed, previous_name);1818set_index_entry(istate, i, ce);18191820 src_offset += consumed;1821}1822strbuf_release(&previous_name_buf);1823 istate->timestamp.sec = st.st_mtime;1824 istate->timestamp.nsec =ST_MTIME_NSEC(st);18251826while(src_offset <= mmap_size -20-8) {1827/* After an array of active_nr index entries,1828 * there can be arbitrary number of extended1829 * sections, each of which is prefixed with1830 * extension name (4-byte) and section length1831 * in 4-byte network byte order.1832 */1833uint32_t extsize;1834memcpy(&extsize, (char*)mmap + src_offset +4,4);1835 extsize =ntohl(extsize);1836if(read_index_extension(istate,1837(const char*) mmap + src_offset,1838(char*) mmap + src_offset +8,1839 extsize) <0)1840goto unmap;1841 src_offset +=8;1842 src_offset += extsize;1843}1844munmap(mmap, mmap_size);1845return istate->cache_nr;18461847unmap:1848munmap(mmap, mmap_size);1849die("index file corrupt");1850}18511852/*1853 * Signal that the shared index is used by updating its mtime.1854 *1855 * This way, shared index can be removed if they have not been used1856 * for some time.1857 */1858static voidfreshen_shared_index(char*base_sha1_hex,int warn)1859{1860char*shared_index =git_pathdup("sharedindex.%s", base_sha1_hex);1861if(!check_and_freshen_file(shared_index,1) && warn)1862warning("could not freshen shared index '%s'", shared_index);1863free(shared_index);1864}18651866intread_index_from(struct index_state *istate,const char*path)1867{1868struct split_index *split_index;1869int ret;1870char*base_sha1_hex;1871const char*base_path;18721873/* istate->initialized covers both .git/index and .git/sharedindex.xxx */1874if(istate->initialized)1875return istate->cache_nr;18761877 ret =do_read_index(istate, path,0);18781879 split_index = istate->split_index;1880if(!split_index ||is_null_sha1(split_index->base_sha1)) {1881post_read_index_from(istate);1882return ret;1883}18841885if(split_index->base)1886discard_index(split_index->base);1887else1888 split_index->base =xcalloc(1,sizeof(*split_index->base));18891890 base_sha1_hex =sha1_to_hex(split_index->base_sha1);1891 base_path =git_path("sharedindex.%s", base_sha1_hex);1892 ret =do_read_index(split_index->base, base_path,1);1893if(hashcmp(split_index->base_sha1, split_index->base->sha1))1894die("broken index, expect%sin%s, got%s",1895 base_sha1_hex, base_path,1896sha1_to_hex(split_index->base->sha1));18971898freshen_shared_index(base_sha1_hex,0);1899merge_base_index(istate);1900post_read_index_from(istate);1901return ret;1902}19031904intis_index_unborn(struct index_state *istate)1905{1906return(!istate->cache_nr && !istate->timestamp.sec);1907}19081909intdiscard_index(struct index_state *istate)1910{1911int i;19121913for(i =0; i < istate->cache_nr; i++) {1914if(istate->cache[i]->index &&1915 istate->split_index &&1916 istate->split_index->base &&1917 istate->cache[i]->index <= istate->split_index->base->cache_nr &&1918 istate->cache[i] == istate->split_index->base->cache[istate->cache[i]->index -1])1919continue;1920free(istate->cache[i]);1921}1922resolve_undo_clear_index(istate);1923 istate->cache_nr =0;1924 istate->cache_changed =0;1925 istate->timestamp.sec =0;1926 istate->timestamp.nsec =0;1927free_name_hash(istate);1928cache_tree_free(&(istate->cache_tree));1929 istate->initialized =0;1930FREE_AND_NULL(istate->cache);1931 istate->cache_alloc =0;1932discard_split_index(istate);1933free_untracked_cache(istate->untracked);1934 istate->untracked = NULL;1935return0;1936}19371938intunmerged_index(const struct index_state *istate)1939{1940int i;1941for(i =0; i < istate->cache_nr; i++) {1942if(ce_stage(istate->cache[i]))1943return1;1944}1945return0;1946}19471948#define WRITE_BUFFER_SIZE 81921949static unsigned char write_buffer[WRITE_BUFFER_SIZE];1950static unsigned long write_buffer_len;19511952static intce_write_flush(git_SHA_CTX *context,int fd)1953{1954unsigned int buffered = write_buffer_len;1955if(buffered) {1956git_SHA1_Update(context, write_buffer, buffered);1957if(write_in_full(fd, write_buffer, buffered) <0)1958return-1;1959 write_buffer_len =0;1960}1961return0;1962}19631964static intce_write(git_SHA_CTX *context,int fd,void*data,unsigned int len)1965{1966while(len) {1967unsigned int buffered = write_buffer_len;1968unsigned int partial = WRITE_BUFFER_SIZE - buffered;1969if(partial > len)1970 partial = len;1971memcpy(write_buffer + buffered, data, partial);1972 buffered += partial;1973if(buffered == WRITE_BUFFER_SIZE) {1974 write_buffer_len = buffered;1975if(ce_write_flush(context, fd))1976return-1;1977 buffered =0;1978}1979 write_buffer_len = buffered;1980 len -= partial;1981 data = (char*) data + partial;1982}1983return0;1984}19851986static intwrite_index_ext_header(git_SHA_CTX *context,int fd,1987unsigned int ext,unsigned int sz)1988{1989 ext =htonl(ext);1990 sz =htonl(sz);1991return((ce_write(context, fd, &ext,4) <0) ||1992(ce_write(context, fd, &sz,4) <0)) ? -1:0;1993}19941995static intce_flush(git_SHA_CTX *context,int fd,unsigned char*sha1)1996{1997unsigned int left = write_buffer_len;19981999if(left) {2000 write_buffer_len =0;2001git_SHA1_Update(context, write_buffer, left);2002}20032004/* Flush first if not enough space for SHA1 signature */2005if(left +20> WRITE_BUFFER_SIZE) {2006if(write_in_full(fd, write_buffer, left) <0)2007return-1;2008 left =0;2009}20102011/* Append the SHA1 signature at the end */2012git_SHA1_Final(write_buffer + left, context);2013hashcpy(sha1, write_buffer + left);2014 left +=20;2015return(write_in_full(fd, write_buffer, left) <0) ? -1:0;2016}20172018static voidce_smudge_racily_clean_entry(struct cache_entry *ce)2019{2020/*2021 * The only thing we care about in this function is to smudge the2022 * falsely clean entry due to touch-update-touch race, so we leave2023 * everything else as they are. We are called for entries whose2024 * ce_stat_data.sd_mtime match the index file mtime.2025 *2026 * Note that this actually does not do much for gitlinks, for2027 * which ce_match_stat_basic() always goes to the actual2028 * contents. The caller checks with is_racy_timestamp() which2029 * always says "no" for gitlinks, so we are not called for them ;-)2030 */2031struct stat st;20322033if(lstat(ce->name, &st) <0)2034return;2035if(ce_match_stat_basic(ce, &st))2036return;2037if(ce_modified_check_fs(ce, &st)) {2038/* This is "racily clean"; smudge it. Note that this2039 * is a tricky code. At first glance, it may appear2040 * that it can break with this sequence:2041 *2042 * $ echo xyzzy >frotz2043 * $ git-update-index --add frotz2044 * $ : >frotz2045 * $ sleep 32046 * $ echo filfre >nitfol2047 * $ git-update-index --add nitfol2048 *2049 * but it does not. When the second update-index runs,2050 * it notices that the entry "frotz" has the same timestamp2051 * as index, and if we were to smudge it by resetting its2052 * size to zero here, then the object name recorded2053 * in index is the 6-byte file but the cached stat information2054 * becomes zero --- which would then match what we would2055 * obtain from the filesystem next time we stat("frotz").2056 *2057 * However, the second update-index, before calling2058 * this function, notices that the cached size is 62059 * bytes and what is on the filesystem is an empty2060 * file, and never calls us, so the cached size information2061 * for "frotz" stays 6 which does not match the filesystem.2062 */2063 ce->ce_stat_data.sd_size =0;2064}2065}20662067/* Copy miscellaneous fields but not the name */2068static voidcopy_cache_entry_to_ondisk(struct ondisk_cache_entry *ondisk,2069struct cache_entry *ce)2070{2071short flags;20722073 ondisk->ctime.sec =htonl(ce->ce_stat_data.sd_ctime.sec);2074 ondisk->mtime.sec =htonl(ce->ce_stat_data.sd_mtime.sec);2075 ondisk->ctime.nsec =htonl(ce->ce_stat_data.sd_ctime.nsec);2076 ondisk->mtime.nsec =htonl(ce->ce_stat_data.sd_mtime.nsec);2077 ondisk->dev =htonl(ce->ce_stat_data.sd_dev);2078 ondisk->ino =htonl(ce->ce_stat_data.sd_ino);2079 ondisk->mode =htonl(ce->ce_mode);2080 ondisk->uid =htonl(ce->ce_stat_data.sd_uid);2081 ondisk->gid =htonl(ce->ce_stat_data.sd_gid);2082 ondisk->size =htonl(ce->ce_stat_data.sd_size);2083hashcpy(ondisk->sha1, ce->oid.hash);20842085 flags = ce->ce_flags & ~CE_NAMEMASK;2086 flags |= (ce_namelen(ce) >= CE_NAMEMASK ? CE_NAMEMASK :ce_namelen(ce));2087 ondisk->flags =htons(flags);2088if(ce->ce_flags & CE_EXTENDED) {2089struct ondisk_cache_entry_extended *ondisk2;2090 ondisk2 = (struct ondisk_cache_entry_extended *)ondisk;2091 ondisk2->flags2 =htons((ce->ce_flags & CE_EXTENDED_FLAGS) >>16);2092}2093}20942095static intce_write_entry(git_SHA_CTX *c,int fd,struct cache_entry *ce,2096struct strbuf *previous_name,struct ondisk_cache_entry *ondisk)2097{2098int size;2099int saved_namelen = saved_namelen;/* compiler workaround */2100int result;2101static unsigned char padding[8] = {0x00};21022103if(ce->ce_flags & CE_STRIP_NAME) {2104 saved_namelen =ce_namelen(ce);2105 ce->ce_namelen =0;2106}21072108if(ce->ce_flags & CE_EXTENDED)2109 size =offsetof(struct ondisk_cache_entry_extended, name);2110else2111 size =offsetof(struct ondisk_cache_entry, name);21122113if(!previous_name) {2114int len =ce_namelen(ce);2115copy_cache_entry_to_ondisk(ondisk, ce);2116 result =ce_write(c, fd, ondisk, size);2117if(!result)2118 result =ce_write(c, fd, ce->name, len);2119if(!result)2120 result =ce_write(c, fd, padding,align_padding_size(size, len));2121}else{2122int common, to_remove, prefix_size;2123unsigned char to_remove_vi[16];2124for(common =0;2125(ce->name[common] &&2126 common < previous_name->len &&2127 ce->name[common] == previous_name->buf[common]);2128 common++)2129;/* still matching */2130 to_remove = previous_name->len - common;2131 prefix_size =encode_varint(to_remove, to_remove_vi);21322133copy_cache_entry_to_ondisk(ondisk, ce);2134 result =ce_write(c, fd, ondisk, size);2135if(!result)2136 result =ce_write(c, fd, to_remove_vi, prefix_size);2137if(!result)2138 result =ce_write(c, fd, ce->name + common,ce_namelen(ce) - common);2139if(!result)2140 result =ce_write(c, fd, padding,1);21412142strbuf_splice(previous_name, common, to_remove,2143 ce->name + common,ce_namelen(ce) - common);2144}2145if(ce->ce_flags & CE_STRIP_NAME) {2146 ce->ce_namelen = saved_namelen;2147 ce->ce_flags &= ~CE_STRIP_NAME;2148}21492150return result;2151}21522153/*2154 * This function verifies if index_state has the correct sha1 of the2155 * index file. Don't die if we have any other failure, just return 0.2156 */2157static intverify_index_from(const struct index_state *istate,const char*path)2158{2159int fd;2160 ssize_t n;2161struct stat st;2162unsigned char sha1[20];21632164if(!istate->initialized)2165return0;21662167 fd =open(path, O_RDONLY);2168if(fd <0)2169return0;21702171if(fstat(fd, &st))2172goto out;21732174if(st.st_size <sizeof(struct cache_header) +20)2175goto out;21762177 n =pread_in_full(fd, sha1,20, st.st_size -20);2178if(n !=20)2179goto out;21802181if(hashcmp(istate->sha1, sha1))2182goto out;21832184close(fd);2185return1;21862187out:2188close(fd);2189return0;2190}21912192static intverify_index(const struct index_state *istate)2193{2194returnverify_index_from(istate,get_index_file());2195}21962197static inthas_racy_timestamp(struct index_state *istate)2198{2199int entries = istate->cache_nr;2200int i;22012202for(i =0; i < entries; i++) {2203struct cache_entry *ce = istate->cache[i];2204if(is_racy_timestamp(istate, ce))2205return1;2206}2207return0;2208}22092210voidupdate_index_if_able(struct index_state *istate,struct lock_file *lockfile)2211{2212if((istate->cache_changed ||has_racy_timestamp(istate)) &&2213verify_index(istate))2214write_locked_index(istate, lockfile, COMMIT_LOCK);2215else2216rollback_lock_file(lockfile);2217}22182219/*2220 * On success, `tempfile` is closed. If it is the temporary file2221 * of a `struct lock_file`, we will therefore effectively perform2222 * a 'close_lock_file_gently()`. Since that is an implementation2223 * detail of lockfiles, callers of `do_write_index()` should not2224 * rely on it.2225 */2226static intdo_write_index(struct index_state *istate,struct tempfile *tempfile,2227int strip_extensions)2228{2229int newfd = tempfile->fd;2230 git_SHA_CTX c;2231struct cache_header hdr;2232int i, err =0, removed, extended, hdr_version;2233struct cache_entry **cache = istate->cache;2234int entries = istate->cache_nr;2235struct stat st;2236struct ondisk_cache_entry_extended ondisk;2237struct strbuf previous_name_buf = STRBUF_INIT, *previous_name;2238int drop_cache_tree =0;22392240for(i = removed = extended =0; i < entries; i++) {2241if(cache[i]->ce_flags & CE_REMOVE)2242 removed++;22432244/* reduce extended entries if possible */2245 cache[i]->ce_flags &= ~CE_EXTENDED;2246if(cache[i]->ce_flags & CE_EXTENDED_FLAGS) {2247 extended++;2248 cache[i]->ce_flags |= CE_EXTENDED;2249}2250}22512252if(!istate->version) {2253 istate->version =get_index_format_default();2254if(getenv("GIT_TEST_SPLIT_INDEX"))2255init_split_index(istate);2256}22572258/* demote version 3 to version 2 when the latter suffices */2259if(istate->version ==3|| istate->version ==2)2260 istate->version = extended ?3:2;22612262 hdr_version = istate->version;22632264 hdr.hdr_signature =htonl(CACHE_SIGNATURE);2265 hdr.hdr_version =htonl(hdr_version);2266 hdr.hdr_entries =htonl(entries - removed);22672268git_SHA1_Init(&c);2269if(ce_write(&c, newfd, &hdr,sizeof(hdr)) <0)2270return-1;22712272 previous_name = (hdr_version ==4) ? &previous_name_buf : NULL;22732274for(i =0; i < entries; i++) {2275struct cache_entry *ce = cache[i];2276if(ce->ce_flags & CE_REMOVE)2277continue;2278if(!ce_uptodate(ce) &&is_racy_timestamp(istate, ce))2279ce_smudge_racily_clean_entry(ce);2280if(is_null_oid(&ce->oid)) {2281static const char msg[] ="cache entry has null sha1:%s";2282static int allow = -1;22832284if(allow <0)2285 allow =git_env_bool("GIT_ALLOW_NULL_SHA1",0);2286if(allow)2287warning(msg, ce->name);2288else2289 err =error(msg, ce->name);22902291 drop_cache_tree =1;2292}2293if(ce_write_entry(&c, newfd, ce, previous_name, (struct ondisk_cache_entry *)&ondisk) <0)2294 err = -1;22952296if(err)2297break;2298}2299strbuf_release(&previous_name_buf);23002301if(err)2302return err;23032304/* Write extension data here */2305if(!strip_extensions && istate->split_index) {2306struct strbuf sb = STRBUF_INIT;23072308 err =write_link_extension(&sb, istate) <0||2309write_index_ext_header(&c, newfd, CACHE_EXT_LINK,2310 sb.len) <0||2311ce_write(&c, newfd, sb.buf, sb.len) <0;2312strbuf_release(&sb);2313if(err)2314return-1;2315}2316if(!strip_extensions && !drop_cache_tree && istate->cache_tree) {2317struct strbuf sb = STRBUF_INIT;23182319cache_tree_write(&sb, istate->cache_tree);2320 err =write_index_ext_header(&c, newfd, CACHE_EXT_TREE, sb.len) <02321||ce_write(&c, newfd, sb.buf, sb.len) <0;2322strbuf_release(&sb);2323if(err)2324return-1;2325}2326if(!strip_extensions && istate->resolve_undo) {2327struct strbuf sb = STRBUF_INIT;23282329resolve_undo_write(&sb, istate->resolve_undo);2330 err =write_index_ext_header(&c, newfd, CACHE_EXT_RESOLVE_UNDO,2331 sb.len) <02332||ce_write(&c, newfd, sb.buf, sb.len) <0;2333strbuf_release(&sb);2334if(err)2335return-1;2336}2337if(!strip_extensions && istate->untracked) {2338struct strbuf sb = STRBUF_INIT;23392340write_untracked_extension(&sb, istate->untracked);2341 err =write_index_ext_header(&c, newfd, CACHE_EXT_UNTRACKED,2342 sb.len) <0||2343ce_write(&c, newfd, sb.buf, sb.len) <0;2344strbuf_release(&sb);2345if(err)2346return-1;2347}2348if(!strip_extensions && istate->fsmonitor_last_update) {2349struct strbuf sb = STRBUF_INIT;23502351write_fsmonitor_extension(&sb, istate);2352 err =write_index_ext_header(&c, newfd, CACHE_EXT_FSMONITOR, sb.len) <02353||ce_write(&c, newfd, sb.buf, sb.len) <0;2354strbuf_release(&sb);2355if(err)2356return-1;2357}23582359if(ce_flush(&c, newfd, istate->sha1))2360return-1;2361if(close_tempfile_gently(tempfile)) {2362error(_("could not close '%s'"), tempfile->filename.buf);2363return-1;2364}2365if(stat(tempfile->filename.buf, &st))2366return-1;2367 istate->timestamp.sec = (unsigned int)st.st_mtime;2368 istate->timestamp.nsec =ST_MTIME_NSEC(st);2369return0;2370}23712372voidset_alternate_index_output(const char*name)2373{2374 alternate_index_output = name;2375}23762377static intcommit_locked_index(struct lock_file *lk)2378{2379if(alternate_index_output)2380returncommit_lock_file_to(lk, alternate_index_output);2381else2382returncommit_lock_file(lk);2383}23842385static intdo_write_locked_index(struct index_state *istate,struct lock_file *lock,2386unsigned flags)2387{2388int ret =do_write_index(istate, lock->tempfile,0);2389if(ret)2390return ret;2391if(flags & COMMIT_LOCK)2392returncommit_locked_index(lock);2393returnclose_lock_file_gently(lock);2394}23952396static intwrite_split_index(struct index_state *istate,2397struct lock_file *lock,2398unsigned flags)2399{2400int ret;2401prepare_to_write_split_index(istate);2402 ret =do_write_locked_index(istate, lock, flags);2403finish_writing_split_index(istate);2404return ret;2405}24062407static const char*shared_index_expire ="2.weeks.ago";24082409static unsigned longget_shared_index_expire_date(void)2410{2411static unsigned long shared_index_expire_date;2412static int shared_index_expire_date_prepared;24132414if(!shared_index_expire_date_prepared) {2415git_config_get_expiry("splitindex.sharedindexexpire",2416&shared_index_expire);2417 shared_index_expire_date =approxidate(shared_index_expire);2418 shared_index_expire_date_prepared =1;2419}24202421return shared_index_expire_date;2422}24232424static intshould_delete_shared_index(const char*shared_index_path)2425{2426struct stat st;2427unsigned long expiration;24282429/* Check timestamp */2430 expiration =get_shared_index_expire_date();2431if(!expiration)2432return0;2433if(stat(shared_index_path, &st))2434returnerror_errno(_("could not stat '%s'"), shared_index_path);2435if(st.st_mtime > expiration)2436return0;24372438return1;2439}24402441static intclean_shared_index_files(const char*current_hex)2442{2443struct dirent *de;2444DIR*dir =opendir(get_git_dir());24452446if(!dir)2447returnerror_errno(_("unable to open git dir:%s"),get_git_dir());24482449while((de =readdir(dir)) != NULL) {2450const char*sha1_hex;2451const char*shared_index_path;2452if(!skip_prefix(de->d_name,"sharedindex.", &sha1_hex))2453continue;2454if(!strcmp(sha1_hex, current_hex))2455continue;2456 shared_index_path =git_path("%s", de->d_name);2457if(should_delete_shared_index(shared_index_path) >0&&2458unlink(shared_index_path))2459warning_errno(_("unable to unlink:%s"), shared_index_path);2460}2461closedir(dir);24622463return0;2464}24652466static intwrite_shared_index(struct index_state *istate,2467struct lock_file *lock,unsigned flags)2468{2469struct tempfile *temp;2470struct split_index *si = istate->split_index;2471int ret;24722473 temp =mks_tempfile(git_path("sharedindex_XXXXXX"));2474if(!temp) {2475hashclr(si->base_sha1);2476returndo_write_locked_index(istate, lock, flags);2477}2478move_cache_to_base_index(istate);2479 ret =do_write_index(si->base, temp,1);2480if(ret) {2481delete_tempfile(&temp);2482return ret;2483}2484 ret =adjust_shared_perm(get_tempfile_path(temp));2485if(ret) {2486int save_errno = errno;2487error("cannot fix permission bits on%s",get_tempfile_path(temp));2488delete_tempfile(&temp);2489 errno = save_errno;2490return ret;2491}2492 ret =rename_tempfile(&temp,2493git_path("sharedindex.%s",sha1_to_hex(si->base->sha1)));2494if(!ret) {2495hashcpy(si->base_sha1, si->base->sha1);2496clean_shared_index_files(sha1_to_hex(si->base->sha1));2497}24982499return ret;2500}25012502static const int default_max_percent_split_change =20;25032504static inttoo_many_not_shared_entries(struct index_state *istate)2505{2506int i, not_shared =0;2507int max_split =git_config_get_max_percent_split_change();25082509switch(max_split) {2510case-1:2511/* not or badly configured: use the default value */2512 max_split = default_max_percent_split_change;2513break;2514case0:2515return1;/* 0% means always write a new shared index */2516case100:2517return0;/* 100% means never write a new shared index */2518default:2519break;/* just use the configured value */2520}25212522/* Count not shared entries */2523for(i =0; i < istate->cache_nr; i++) {2524struct cache_entry *ce = istate->cache[i];2525if(!ce->index)2526 not_shared++;2527}25282529return(int64_t)istate->cache_nr * max_split < (int64_t)not_shared *100;2530}25312532intwrite_locked_index(struct index_state *istate,struct lock_file *lock,2533unsigned flags)2534{2535int new_shared_index, ret;2536struct split_index *si = istate->split_index;25372538if(istate->fsmonitor_last_update)2539fill_fsmonitor_bitmap(istate);25402541if(!si || alternate_index_output ||2542(istate->cache_changed & ~EXTMASK)) {2543if(si)2544hashclr(si->base_sha1);2545 ret =do_write_locked_index(istate, lock, flags);2546goto out;2547}25482549if(getenv("GIT_TEST_SPLIT_INDEX")) {2550int v = si->base_sha1[0];2551if((v &15) <6)2552 istate->cache_changed |= SPLIT_INDEX_ORDERED;2553}2554if(too_many_not_shared_entries(istate))2555 istate->cache_changed |= SPLIT_INDEX_ORDERED;25562557 new_shared_index = istate->cache_changed & SPLIT_INDEX_ORDERED;25582559if(new_shared_index) {2560 ret =write_shared_index(istate, lock, flags);2561if(ret)2562goto out;2563}25642565 ret =write_split_index(istate, lock, flags);25662567/* Freshen the shared index only if the split-index was written */2568if(!ret && !new_shared_index)2569freshen_shared_index(sha1_to_hex(si->base_sha1),1);25702571out:2572if(flags & COMMIT_LOCK)2573rollback_lock_file(lock);2574return ret;2575}25762577/*2578 * Read the index file that is potentially unmerged into given2579 * index_state, dropping any unmerged entries. Returns true if2580 * the index is unmerged. Callers who want to refuse to work2581 * from an unmerged state can call this and check its return value,2582 * instead of calling read_cache().2583 */2584intread_index_unmerged(struct index_state *istate)2585{2586int i;2587int unmerged =0;25882589read_index(istate);2590for(i =0; i < istate->cache_nr; i++) {2591struct cache_entry *ce = istate->cache[i];2592struct cache_entry *new_ce;2593int size, len;25942595if(!ce_stage(ce))2596continue;2597 unmerged =1;2598 len =ce_namelen(ce);2599 size =cache_entry_size(len);2600 new_ce =xcalloc(1, size);2601memcpy(new_ce->name, ce->name, len);2602 new_ce->ce_flags =create_ce_flags(0) | CE_CONFLICTED;2603 new_ce->ce_namelen = len;2604 new_ce->ce_mode = ce->ce_mode;2605if(add_index_entry(istate, new_ce,0))2606returnerror("%s: cannot drop to stage #0",2607 new_ce->name);2608}2609return unmerged;2610}26112612/*2613 * Returns 1 if the path is an "other" path with respect to2614 * the index; that is, the path is not mentioned in the index at all,2615 * either as a file, a directory with some files in the index,2616 * or as an unmerged entry.2617 *2618 * We helpfully remove a trailing "/" from directories so that2619 * the output of read_directory can be used as-is.2620 */2621intindex_name_is_other(const struct index_state *istate,const char*name,2622int namelen)2623{2624int pos;2625if(namelen && name[namelen -1] =='/')2626 namelen--;2627 pos =index_name_pos(istate, name, namelen);2628if(0<= pos)2629return0;/* exact match */2630 pos = -pos -1;2631if(pos < istate->cache_nr) {2632struct cache_entry *ce = istate->cache[pos];2633if(ce_namelen(ce) == namelen &&2634!memcmp(ce->name, name, namelen))2635return0;/* Yup, this one exists unmerged */2636}2637return1;2638}26392640void*read_blob_data_from_index(const struct index_state *istate,2641const char*path,unsigned long*size)2642{2643int pos, len;2644unsigned long sz;2645enum object_type type;2646void*data;26472648 len =strlen(path);2649 pos =index_name_pos(istate, path, len);2650if(pos <0) {2651/*2652 * We might be in the middle of a merge, in which2653 * case we would read stage #2 (ours).2654 */2655int i;2656for(i = -pos -1;2657(pos <0&& i < istate->cache_nr &&2658!strcmp(istate->cache[i]->name, path));2659 i++)2660if(ce_stage(istate->cache[i]) ==2)2661 pos = i;2662}2663if(pos <0)2664return NULL;2665 data =read_sha1_file(istate->cache[pos]->oid.hash, &type, &sz);2666if(!data || type != OBJ_BLOB) {2667free(data);2668return NULL;2669}2670if(size)2671*size = sz;2672return data;2673}26742675voidstat_validity_clear(struct stat_validity *sv)2676{2677FREE_AND_NULL(sv->sd);2678}26792680intstat_validity_check(struct stat_validity *sv,const char*path)2681{2682struct stat st;26832684if(stat(path, &st) <0)2685return sv->sd == NULL;2686if(!sv->sd)2687return0;2688returnS_ISREG(st.st_mode) && !match_stat_data(sv->sd, &st);2689}26902691voidstat_validity_update(struct stat_validity *sv,int fd)2692{2693struct stat st;26942695if(fstat(fd, &st) <0|| !S_ISREG(st.st_mode))2696stat_validity_clear(sv);2697else{2698if(!sv->sd)2699 sv->sd =xcalloc(1,sizeof(struct stat_data));2700fill_stat_data(sv->sd, &st);2701}2702}27032704voidmove_index_extensions(struct index_state *dst,struct index_state *src)2705{2706 dst->untracked = src->untracked;2707 src->untracked = NULL;2708}