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"cache-tree.h" 9#include"refs.h" 10#include"dir.h" 11 12/* Index extensions. 13 * 14 * The first letter should be 'A'..'Z' for extensions that are not 15 * necessary for a correct operation (i.e. optimization data). 16 * When new extensions are added that _needs_ to be understood in 17 * order to correctly interpret the index file, pick character that 18 * is outside the range, to cause the reader to abort. 19 */ 20 21#define CACHE_EXT(s) ( (s[0]<<24)|(s[1]<<16)|(s[2]<<8)|(s[3]) ) 22#define CACHE_EXT_TREE 0x54524545/* "TREE" */ 23 24struct index_state the_index; 25 26static unsigned inthash_name(const char*name,int namelen) 27{ 28unsigned int hash =0x123; 29 30do{ 31unsigned char c = *name++; 32 hash = hash*101+ c; 33}while(--namelen); 34return hash; 35} 36 37static voidhash_index_entry(struct index_state *istate,struct cache_entry *ce) 38{ 39void**pos; 40unsigned int hash; 41 42if(ce->ce_flags & CE_HASHED) 43return; 44 ce->ce_flags |= CE_HASHED; 45 ce->next = NULL; 46 hash =hash_name(ce->name,ce_namelen(ce)); 47 pos =insert_hash(hash, ce, &istate->name_hash); 48if(pos) { 49 ce->next = *pos; 50*pos = ce; 51} 52} 53 54static voidlazy_init_name_hash(struct index_state *istate) 55{ 56int nr; 57 58if(istate->name_hash_initialized) 59return; 60for(nr =0; nr < istate->cache_nr; nr++) 61hash_index_entry(istate, istate->cache[nr]); 62 istate->name_hash_initialized =1; 63} 64 65static voidset_index_entry(struct index_state *istate,int nr,struct cache_entry *ce) 66{ 67 ce->ce_flags &= ~CE_UNHASHED; 68 istate->cache[nr] = ce; 69if(istate->name_hash_initialized) 70hash_index_entry(istate, ce); 71} 72 73/* 74 * We don't actually *remove* it, we can just mark it invalid so that 75 * we won't find it in lookups. 76 * 77 * Not only would we have to search the lists (simple enough), but 78 * we'd also have to rehash other hash buckets in case this makes the 79 * hash bucket empty (common). So it's much better to just mark 80 * it. 81 */ 82static voidremove_hash_entry(struct index_state *istate,struct cache_entry *ce) 83{ 84 ce->ce_flags |= CE_UNHASHED; 85} 86 87static voidreplace_index_entry(struct index_state *istate,int nr,struct cache_entry *ce) 88{ 89struct cache_entry *old = istate->cache[nr]; 90 91remove_hash_entry(istate, old); 92set_index_entry(istate, nr, ce); 93 istate->cache_changed =1; 94} 95 96intindex_name_exists(struct index_state *istate,const char*name,int namelen) 97{ 98unsigned int hash =hash_name(name, namelen); 99struct cache_entry *ce; 100 101lazy_init_name_hash(istate); 102 ce =lookup_hash(hash, &istate->name_hash); 103 104while(ce) { 105if(!(ce->ce_flags & CE_UNHASHED)) { 106if(!cache_name_compare(name, namelen, ce->name, ce->ce_flags)) 107return1; 108} 109 ce = ce->next; 110} 111return0; 112} 113 114/* 115 * This only updates the "non-critical" parts of the directory 116 * cache, ie the parts that aren't tracked by GIT, and only used 117 * to validate the cache. 118 */ 119voidfill_stat_cache_info(struct cache_entry *ce,struct stat *st) 120{ 121 ce->ce_ctime = st->st_ctime; 122 ce->ce_mtime = st->st_mtime; 123 ce->ce_dev = st->st_dev; 124 ce->ce_ino = st->st_ino; 125 ce->ce_uid = st->st_uid; 126 ce->ce_gid = st->st_gid; 127 ce->ce_size = st->st_size; 128 129if(assume_unchanged) 130 ce->ce_flags |= CE_VALID; 131 132if(S_ISREG(st->st_mode)) 133ce_mark_uptodate(ce); 134} 135 136static intce_compare_data(struct cache_entry *ce,struct stat *st) 137{ 138int match = -1; 139int fd =open(ce->name, O_RDONLY); 140 141if(fd >=0) { 142unsigned char sha1[20]; 143if(!index_fd(sha1, fd, st,0, OBJ_BLOB, ce->name)) 144 match =hashcmp(sha1, ce->sha1); 145/* index_fd() closed the file descriptor already */ 146} 147return match; 148} 149 150static intce_compare_link(struct cache_entry *ce,size_t expected_size) 151{ 152int match = -1; 153char*target; 154void*buffer; 155unsigned long size; 156enum object_type type; 157int len; 158 159 target =xmalloc(expected_size); 160 len =readlink(ce->name, target, expected_size); 161if(len != expected_size) { 162free(target); 163return-1; 164} 165 buffer =read_sha1_file(ce->sha1, &type, &size); 166if(!buffer) { 167free(target); 168return-1; 169} 170if(size == expected_size) 171 match =memcmp(buffer, target, size); 172free(buffer); 173free(target); 174return match; 175} 176 177static intce_compare_gitlink(struct cache_entry *ce) 178{ 179unsigned char sha1[20]; 180 181/* 182 * We don't actually require that the .git directory 183 * under GITLINK directory be a valid git directory. It 184 * might even be missing (in case nobody populated that 185 * sub-project). 186 * 187 * If so, we consider it always to match. 188 */ 189if(resolve_gitlink_ref(ce->name,"HEAD", sha1) <0) 190return0; 191returnhashcmp(sha1, ce->sha1); 192} 193 194static intce_modified_check_fs(struct cache_entry *ce,struct stat *st) 195{ 196switch(st->st_mode & S_IFMT) { 197case S_IFREG: 198if(ce_compare_data(ce, st)) 199return DATA_CHANGED; 200break; 201case S_IFLNK: 202if(ce_compare_link(ce,xsize_t(st->st_size))) 203return DATA_CHANGED; 204break; 205case S_IFDIR: 206if(S_ISGITLINK(ce->ce_mode)) 207return0; 208default: 209return TYPE_CHANGED; 210} 211return0; 212} 213 214static intce_match_stat_basic(struct cache_entry *ce,struct stat *st) 215{ 216unsigned int changed =0; 217 218if(ce->ce_flags & CE_REMOVE) 219return MODE_CHANGED | DATA_CHANGED | TYPE_CHANGED; 220 221switch(ce->ce_mode & S_IFMT) { 222case S_IFREG: 223 changed |= !S_ISREG(st->st_mode) ? TYPE_CHANGED :0; 224/* We consider only the owner x bit to be relevant for 225 * "mode changes" 226 */ 227if(trust_executable_bit && 228(0100& (ce->ce_mode ^ st->st_mode))) 229 changed |= MODE_CHANGED; 230break; 231case S_IFLNK: 232if(!S_ISLNK(st->st_mode) && 233(has_symlinks || !S_ISREG(st->st_mode))) 234 changed |= TYPE_CHANGED; 235break; 236case S_IFGITLINK: 237if(!S_ISDIR(st->st_mode)) 238 changed |= TYPE_CHANGED; 239else if(ce_compare_gitlink(ce)) 240 changed |= DATA_CHANGED; 241return changed; 242default: 243die("internal error: ce_mode is%o", ce->ce_mode); 244} 245if(ce->ce_mtime != (unsigned int) st->st_mtime) 246 changed |= MTIME_CHANGED; 247if(ce->ce_ctime != (unsigned int) st->st_ctime) 248 changed |= CTIME_CHANGED; 249 250if(ce->ce_uid != (unsigned int) st->st_uid || 251 ce->ce_gid != (unsigned int) st->st_gid) 252 changed |= OWNER_CHANGED; 253if(ce->ce_ino != (unsigned int) st->st_ino) 254 changed |= INODE_CHANGED; 255 256#ifdef USE_STDEV 257/* 258 * st_dev breaks on network filesystems where different 259 * clients will have different views of what "device" 260 * the filesystem is on 261 */ 262if(ce->ce_dev != (unsigned int) st->st_dev) 263 changed |= INODE_CHANGED; 264#endif 265 266if(ce->ce_size != (unsigned int) st->st_size) 267 changed |= DATA_CHANGED; 268 269return changed; 270} 271 272static intis_racy_timestamp(struct index_state *istate,struct cache_entry *ce) 273{ 274return(istate->timestamp && 275((unsigned int)istate->timestamp) <= ce->ce_mtime); 276} 277 278intie_match_stat(struct index_state *istate, 279struct cache_entry *ce,struct stat *st, 280unsigned int options) 281{ 282unsigned int changed; 283int ignore_valid = options & CE_MATCH_IGNORE_VALID; 284int assume_racy_is_modified = options & CE_MATCH_RACY_IS_DIRTY; 285 286/* 287 * If it's marked as always valid in the index, it's 288 * valid whatever the checked-out copy says. 289 */ 290if(!ignore_valid && (ce->ce_flags & CE_VALID)) 291return0; 292 293 changed =ce_match_stat_basic(ce, st); 294 295/* 296 * Within 1 second of this sequence: 297 * echo xyzzy >file && git-update-index --add file 298 * running this command: 299 * echo frotz >file 300 * would give a falsely clean cache entry. The mtime and 301 * length match the cache, and other stat fields do not change. 302 * 303 * We could detect this at update-index time (the cache entry 304 * being registered/updated records the same time as "now") 305 * and delay the return from git-update-index, but that would 306 * effectively mean we can make at most one commit per second, 307 * which is not acceptable. Instead, we check cache entries 308 * whose mtime are the same as the index file timestamp more 309 * carefully than others. 310 */ 311if(!changed &&is_racy_timestamp(istate, ce)) { 312if(assume_racy_is_modified) 313 changed |= DATA_CHANGED; 314else 315 changed |=ce_modified_check_fs(ce, st); 316} 317 318return changed; 319} 320 321intie_modified(struct index_state *istate, 322struct cache_entry *ce,struct stat *st,unsigned int options) 323{ 324int changed, changed_fs; 325 326 changed =ie_match_stat(istate, ce, st, options); 327if(!changed) 328return0; 329/* 330 * If the mode or type has changed, there's no point in trying 331 * to refresh the entry - it's not going to match 332 */ 333if(changed & (MODE_CHANGED | TYPE_CHANGED)) 334return changed; 335 336/* Immediately after read-tree or update-index --cacheinfo, 337 * the length field is zero. For other cases the ce_size 338 * should match the SHA1 recorded in the index entry. 339 */ 340if((changed & DATA_CHANGED) && ce->ce_size !=0) 341return changed; 342 343 changed_fs =ce_modified_check_fs(ce, st); 344if(changed_fs) 345return changed | changed_fs; 346return0; 347} 348 349intbase_name_compare(const char*name1,int len1,int mode1, 350const char*name2,int len2,int mode2) 351{ 352unsigned char c1, c2; 353int len = len1 < len2 ? len1 : len2; 354int cmp; 355 356 cmp =memcmp(name1, name2, len); 357if(cmp) 358return cmp; 359 c1 = name1[len]; 360 c2 = name2[len]; 361if(!c1 &&S_ISDIR(mode1)) 362 c1 ='/'; 363if(!c2 &&S_ISDIR(mode2)) 364 c2 ='/'; 365return(c1 < c2) ? -1: (c1 > c2) ?1:0; 366} 367 368intcache_name_compare(const char*name1,int flags1,const char*name2,int flags2) 369{ 370int len1 = flags1 & CE_NAMEMASK; 371int len2 = flags2 & CE_NAMEMASK; 372int len = len1 < len2 ? len1 : len2; 373int cmp; 374 375 cmp =memcmp(name1, name2, len); 376if(cmp) 377return cmp; 378if(len1 < len2) 379return-1; 380if(len1 > len2) 381return1; 382 383/* Compare stages */ 384 flags1 &= CE_STAGEMASK; 385 flags2 &= CE_STAGEMASK; 386 387if(flags1 < flags2) 388return-1; 389if(flags1 > flags2) 390return1; 391return0; 392} 393 394intindex_name_pos(struct index_state *istate,const char*name,int namelen) 395{ 396int first, last; 397 398 first =0; 399 last = istate->cache_nr; 400while(last > first) { 401int next = (last + first) >>1; 402struct cache_entry *ce = istate->cache[next]; 403int cmp =cache_name_compare(name, namelen, ce->name, ce->ce_flags); 404if(!cmp) 405return next; 406if(cmp <0) { 407 last = next; 408continue; 409} 410 first = next+1; 411} 412return-first-1; 413} 414 415/* Remove entry, return true if there are more entries to go.. */ 416intremove_index_entry_at(struct index_state *istate,int pos) 417{ 418struct cache_entry *ce = istate->cache[pos]; 419 420remove_hash_entry(istate, ce); 421 istate->cache_changed =1; 422 istate->cache_nr--; 423if(pos >= istate->cache_nr) 424return0; 425memmove(istate->cache + pos, 426 istate->cache + pos +1, 427(istate->cache_nr - pos) *sizeof(struct cache_entry *)); 428return1; 429} 430 431intremove_file_from_index(struct index_state *istate,const char*path) 432{ 433int pos =index_name_pos(istate, path,strlen(path)); 434if(pos <0) 435 pos = -pos-1; 436cache_tree_invalidate_path(istate->cache_tree, path); 437while(pos < istate->cache_nr && !strcmp(istate->cache[pos]->name, path)) 438remove_index_entry_at(istate, pos); 439return0; 440} 441 442static intcompare_name(struct cache_entry *ce,const char*path,int namelen) 443{ 444return namelen !=ce_namelen(ce) ||memcmp(path, ce->name, namelen); 445} 446 447static intindex_name_pos_also_unmerged(struct index_state *istate, 448const char*path,int namelen) 449{ 450int pos =index_name_pos(istate, path, namelen); 451struct cache_entry *ce; 452 453if(pos >=0) 454return pos; 455 456/* maybe unmerged? */ 457 pos = -1- pos; 458if(pos >= istate->cache_nr || 459compare_name((ce = istate->cache[pos]), path, namelen)) 460return-1; 461 462/* order of preference: stage 2, 1, 3 */ 463if(ce_stage(ce) ==1&& pos +1< istate->cache_nr && 464ce_stage((ce = istate->cache[pos +1])) ==2&& 465!compare_name(ce, path, namelen)) 466 pos++; 467return pos; 468} 469 470intadd_file_to_index(struct index_state *istate,const char*path,int verbose) 471{ 472int size, namelen, pos; 473struct stat st; 474struct cache_entry *ce; 475unsigned ce_option = CE_MATCH_IGNORE_VALID|CE_MATCH_RACY_IS_DIRTY; 476 477if(lstat(path, &st)) 478die("%s: unable to stat (%s)", path,strerror(errno)); 479 480if(!S_ISREG(st.st_mode) && !S_ISLNK(st.st_mode) && !S_ISDIR(st.st_mode)) 481die("%s: can only add regular files, symbolic links or git-directories", path); 482 483 namelen =strlen(path); 484if(S_ISDIR(st.st_mode)) { 485while(namelen && path[namelen-1] =='/') 486 namelen--; 487} 488 size =cache_entry_size(namelen); 489 ce =xcalloc(1, size); 490memcpy(ce->name, path, namelen); 491 ce->ce_flags = namelen; 492fill_stat_cache_info(ce, &st); 493 494if(trust_executable_bit && has_symlinks) 495 ce->ce_mode =create_ce_mode(st.st_mode); 496else{ 497/* If there is an existing entry, pick the mode bits and type 498 * from it, otherwise assume unexecutable regular file. 499 */ 500struct cache_entry *ent; 501int pos =index_name_pos_also_unmerged(istate, path, namelen); 502 503 ent = (0<= pos) ? istate->cache[pos] : NULL; 504 ce->ce_mode =ce_mode_from_stat(ent, st.st_mode); 505} 506 507 pos =index_name_pos(istate, ce->name, namelen); 508if(0<= pos && 509!ce_stage(istate->cache[pos]) && 510!ie_match_stat(istate, istate->cache[pos], &st, ce_option)) { 511/* Nothing changed, really */ 512free(ce); 513ce_mark_uptodate(istate->cache[pos]); 514return0; 515} 516 517if(index_path(ce->sha1, path, &st,1)) 518die("unable to index file%s", path); 519if(add_index_entry(istate, ce, ADD_CACHE_OK_TO_ADD|ADD_CACHE_OK_TO_REPLACE)) 520die("unable to add%sto index",path); 521if(verbose) 522printf("add '%s'\n", path); 523return0; 524} 525 526struct cache_entry *make_cache_entry(unsigned int mode, 527const unsigned char*sha1,const char*path,int stage, 528int refresh) 529{ 530int size, len; 531struct cache_entry *ce; 532 533if(!verify_path(path)) 534return NULL; 535 536 len =strlen(path); 537 size =cache_entry_size(len); 538 ce =xcalloc(1, size); 539 540hashcpy(ce->sha1, sha1); 541memcpy(ce->name, path, len); 542 ce->ce_flags =create_ce_flags(len, stage); 543 ce->ce_mode =create_ce_mode(mode); 544 545if(refresh) 546returnrefresh_cache_entry(ce,0); 547 548return ce; 549} 550 551intce_same_name(struct cache_entry *a,struct cache_entry *b) 552{ 553int len =ce_namelen(a); 554returnce_namelen(b) == len && !memcmp(a->name, b->name, len); 555} 556 557intce_path_match(const struct cache_entry *ce,const char**pathspec) 558{ 559const char*match, *name; 560int len; 561 562if(!pathspec) 563return1; 564 565 len =ce_namelen(ce); 566 name = ce->name; 567while((match = *pathspec++) != NULL) { 568int matchlen =strlen(match); 569if(matchlen > len) 570continue; 571if(memcmp(name, match, matchlen)) 572continue; 573if(matchlen && name[matchlen-1] =='/') 574return1; 575if(name[matchlen] =='/'|| !name[matchlen]) 576return1; 577if(!matchlen) 578return1; 579} 580return0; 581} 582 583/* 584 * We fundamentally don't like some paths: we don't want 585 * dot or dot-dot anywhere, and for obvious reasons don't 586 * want to recurse into ".git" either. 587 * 588 * Also, we don't want double slashes or slashes at the 589 * end that can make pathnames ambiguous. 590 */ 591static intverify_dotfile(const char*rest) 592{ 593/* 594 * The first character was '.', but that 595 * has already been discarded, we now test 596 * the rest. 597 */ 598switch(*rest) { 599/* "." is not allowed */ 600case'\0':case'/': 601return0; 602 603/* 604 * ".git" followed by NUL or slash is bad. This 605 * shares the path end test with the ".." case. 606 */ 607case'g': 608if(rest[1] !='i') 609break; 610if(rest[2] !='t') 611break; 612 rest +=2; 613/* fallthrough */ 614case'.': 615if(rest[1] =='\0'|| rest[1] =='/') 616return0; 617} 618return1; 619} 620 621intverify_path(const char*path) 622{ 623char c; 624 625goto inside; 626for(;;) { 627if(!c) 628return1; 629if(c =='/') { 630inside: 631 c = *path++; 632switch(c) { 633default: 634continue; 635case'/':case'\0': 636break; 637case'.': 638if(verify_dotfile(path)) 639continue; 640} 641return0; 642} 643 c = *path++; 644} 645} 646 647/* 648 * Do we have another file that has the beginning components being a 649 * proper superset of the name we're trying to add? 650 */ 651static inthas_file_name(struct index_state *istate, 652const struct cache_entry *ce,int pos,int ok_to_replace) 653{ 654int retval =0; 655int len =ce_namelen(ce); 656int stage =ce_stage(ce); 657const char*name = ce->name; 658 659while(pos < istate->cache_nr) { 660struct cache_entry *p = istate->cache[pos++]; 661 662if(len >=ce_namelen(p)) 663break; 664if(memcmp(name, p->name, len)) 665break; 666if(ce_stage(p) != stage) 667continue; 668if(p->name[len] !='/') 669continue; 670if(p->ce_flags & CE_REMOVE) 671continue; 672 retval = -1; 673if(!ok_to_replace) 674break; 675remove_index_entry_at(istate, --pos); 676} 677return retval; 678} 679 680/* 681 * Do we have another file with a pathname that is a proper 682 * subset of the name we're trying to add? 683 */ 684static inthas_dir_name(struct index_state *istate, 685const struct cache_entry *ce,int pos,int ok_to_replace) 686{ 687int retval =0; 688int stage =ce_stage(ce); 689const char*name = ce->name; 690const char*slash = name +ce_namelen(ce); 691 692for(;;) { 693int len; 694 695for(;;) { 696if(*--slash =='/') 697break; 698if(slash <= ce->name) 699return retval; 700} 701 len = slash - name; 702 703 pos =index_name_pos(istate, name,create_ce_flags(len, stage)); 704if(pos >=0) { 705/* 706 * Found one, but not so fast. This could 707 * be a marker that says "I was here, but 708 * I am being removed". Such an entry is 709 * not a part of the resulting tree, and 710 * it is Ok to have a directory at the same 711 * path. 712 */ 713if(!(istate->cache[pos]->ce_flags & CE_REMOVE)) { 714 retval = -1; 715if(!ok_to_replace) 716break; 717remove_index_entry_at(istate, pos); 718continue; 719} 720} 721else 722 pos = -pos-1; 723 724/* 725 * Trivial optimization: if we find an entry that 726 * already matches the sub-directory, then we know 727 * we're ok, and we can exit. 728 */ 729while(pos < istate->cache_nr) { 730struct cache_entry *p = istate->cache[pos]; 731if((ce_namelen(p) <= len) || 732(p->name[len] !='/') || 733memcmp(p->name, name, len)) 734break;/* not our subdirectory */ 735if(ce_stage(p) == stage && !(p->ce_flags & CE_REMOVE)) 736/* 737 * p is at the same stage as our entry, and 738 * is a subdirectory of what we are looking 739 * at, so we cannot have conflicts at our 740 * level or anything shorter. 741 */ 742return retval; 743 pos++; 744} 745} 746return retval; 747} 748 749/* We may be in a situation where we already have path/file and path 750 * is being added, or we already have path and path/file is being 751 * added. Either one would result in a nonsense tree that has path 752 * twice when git-write-tree tries to write it out. Prevent it. 753 * 754 * If ok-to-replace is specified, we remove the conflicting entries 755 * from the cache so the caller should recompute the insert position. 756 * When this happens, we return non-zero. 757 */ 758static intcheck_file_directory_conflict(struct index_state *istate, 759const struct cache_entry *ce, 760int pos,int ok_to_replace) 761{ 762int retval; 763 764/* 765 * When ce is an "I am going away" entry, we allow it to be added 766 */ 767if(ce->ce_flags & CE_REMOVE) 768return0; 769 770/* 771 * We check if the path is a sub-path of a subsequent pathname 772 * first, since removing those will not change the position 773 * in the array. 774 */ 775 retval =has_file_name(istate, ce, pos, ok_to_replace); 776 777/* 778 * Then check if the path might have a clashing sub-directory 779 * before it. 780 */ 781return retval +has_dir_name(istate, ce, pos, ok_to_replace); 782} 783 784static intadd_index_entry_with_check(struct index_state *istate,struct cache_entry *ce,int option) 785{ 786int pos; 787int ok_to_add = option & ADD_CACHE_OK_TO_ADD; 788int ok_to_replace = option & ADD_CACHE_OK_TO_REPLACE; 789int skip_df_check = option & ADD_CACHE_SKIP_DFCHECK; 790 791cache_tree_invalidate_path(istate->cache_tree, ce->name); 792 pos =index_name_pos(istate, ce->name, ce->ce_flags); 793 794/* existing match? Just replace it. */ 795if(pos >=0) { 796replace_index_entry(istate, pos, ce); 797return0; 798} 799 pos = -pos-1; 800 801/* 802 * Inserting a merged entry ("stage 0") into the index 803 * will always replace all non-merged entries.. 804 */ 805if(pos < istate->cache_nr &&ce_stage(ce) ==0) { 806while(ce_same_name(istate->cache[pos], ce)) { 807 ok_to_add =1; 808if(!remove_index_entry_at(istate, pos)) 809break; 810} 811} 812 813if(!ok_to_add) 814return-1; 815if(!verify_path(ce->name)) 816return-1; 817 818if(!skip_df_check && 819check_file_directory_conflict(istate, ce, pos, ok_to_replace)) { 820if(!ok_to_replace) 821returnerror("'%s' appears as both a file and as a directory", 822 ce->name); 823 pos =index_name_pos(istate, ce->name, ce->ce_flags); 824 pos = -pos-1; 825} 826return pos +1; 827} 828 829intadd_index_entry(struct index_state *istate,struct cache_entry *ce,int option) 830{ 831int pos; 832 833if(option & ADD_CACHE_JUST_APPEND) 834 pos = istate->cache_nr; 835else{ 836int ret; 837 ret =add_index_entry_with_check(istate, ce, option); 838if(ret <=0) 839return ret; 840 pos = ret -1; 841} 842 843/* Make sure the array is big enough .. */ 844if(istate->cache_nr == istate->cache_alloc) { 845 istate->cache_alloc =alloc_nr(istate->cache_alloc); 846 istate->cache =xrealloc(istate->cache, 847 istate->cache_alloc *sizeof(struct cache_entry *)); 848} 849 850/* Add it in.. */ 851 istate->cache_nr++; 852if(istate->cache_nr > pos +1) 853memmove(istate->cache + pos +1, 854 istate->cache + pos, 855(istate->cache_nr - pos -1) *sizeof(ce)); 856set_index_entry(istate, pos, ce); 857 istate->cache_changed =1; 858return0; 859} 860 861/* 862 * "refresh" does not calculate a new sha1 file or bring the 863 * cache up-to-date for mode/content changes. But what it 864 * _does_ do is to "re-match" the stat information of a file 865 * with the cache, so that you can refresh the cache for a 866 * file that hasn't been changed but where the stat entry is 867 * out of date. 868 * 869 * For example, you'd want to do this after doing a "git-read-tree", 870 * to link up the stat cache details with the proper files. 871 */ 872static struct cache_entry *refresh_cache_ent(struct index_state *istate, 873struct cache_entry *ce, 874unsigned int options,int*err) 875{ 876struct stat st; 877struct cache_entry *updated; 878int changed, size; 879int ignore_valid = options & CE_MATCH_IGNORE_VALID; 880 881if(ce_uptodate(ce)) 882return ce; 883 884if(lstat(ce->name, &st) <0) { 885if(err) 886*err = errno; 887return NULL; 888} 889 890 changed =ie_match_stat(istate, ce, &st, options); 891if(!changed) { 892/* 893 * The path is unchanged. If we were told to ignore 894 * valid bit, then we did the actual stat check and 895 * found that the entry is unmodified. If the entry 896 * is not marked VALID, this is the place to mark it 897 * valid again, under "assume unchanged" mode. 898 */ 899if(ignore_valid && assume_unchanged && 900!(ce->ce_flags & CE_VALID)) 901;/* mark this one VALID again */ 902else{ 903/* 904 * We do not mark the index itself "modified" 905 * because CE_UPTODATE flag is in-core only; 906 * we are not going to write this change out. 907 */ 908ce_mark_uptodate(ce); 909return ce; 910} 911} 912 913if(ie_modified(istate, ce, &st, options)) { 914if(err) 915*err = EINVAL; 916return NULL; 917} 918 919 size =ce_size(ce); 920 updated =xmalloc(size); 921memcpy(updated, ce, size); 922fill_stat_cache_info(updated, &st); 923/* 924 * If ignore_valid is not set, we should leave CE_VALID bit 925 * alone. Otherwise, paths marked with --no-assume-unchanged 926 * (i.e. things to be edited) will reacquire CE_VALID bit 927 * automatically, which is not really what we want. 928 */ 929if(!ignore_valid && assume_unchanged && 930!(ce->ce_flags & CE_VALID)) 931 updated->ce_flags &= ~CE_VALID; 932 933return updated; 934} 935 936intrefresh_index(struct index_state *istate,unsigned int flags,const char**pathspec,char*seen) 937{ 938int i; 939int has_errors =0; 940int really = (flags & REFRESH_REALLY) !=0; 941int allow_unmerged = (flags & REFRESH_UNMERGED) !=0; 942int quiet = (flags & REFRESH_QUIET) !=0; 943int not_new = (flags & REFRESH_IGNORE_MISSING) !=0; 944unsigned int options = really ? CE_MATCH_IGNORE_VALID :0; 945 946for(i =0; i < istate->cache_nr; i++) { 947struct cache_entry *ce, *new; 948int cache_errno =0; 949 950 ce = istate->cache[i]; 951if(ce_stage(ce)) { 952while((i < istate->cache_nr) && 953!strcmp(istate->cache[i]->name, ce->name)) 954 i++; 955 i--; 956if(allow_unmerged) 957continue; 958printf("%s: needs merge\n", ce->name); 959 has_errors =1; 960continue; 961} 962 963if(pathspec && !match_pathspec(pathspec, ce->name,strlen(ce->name),0, seen)) 964continue; 965 966new=refresh_cache_ent(istate, ce, options, &cache_errno); 967if(new== ce) 968continue; 969if(!new) { 970if(not_new && cache_errno == ENOENT) 971continue; 972if(really && cache_errno == EINVAL) { 973/* If we are doing --really-refresh that 974 * means the index is not valid anymore. 975 */ 976 ce->ce_flags &= ~CE_VALID; 977 istate->cache_changed =1; 978} 979if(quiet) 980continue; 981printf("%s: needs update\n", ce->name); 982 has_errors =1; 983continue; 984} 985 986replace_index_entry(istate, i,new); 987} 988return has_errors; 989} 990 991struct cache_entry *refresh_cache_entry(struct cache_entry *ce,int really) 992{ 993returnrefresh_cache_ent(&the_index, ce, really, NULL); 994} 995 996static intverify_hdr(struct cache_header *hdr,unsigned long size) 997{ 998 SHA_CTX c; 999unsigned char sha1[20];10001001if(hdr->hdr_signature !=htonl(CACHE_SIGNATURE))1002returnerror("bad signature");1003if(hdr->hdr_version !=htonl(2))1004returnerror("bad index version");1005SHA1_Init(&c);1006SHA1_Update(&c, hdr, size -20);1007SHA1_Final(sha1, &c);1008if(hashcmp(sha1, (unsigned char*)hdr + size -20))1009returnerror("bad index file sha1 signature");1010return0;1011}10121013static intread_index_extension(struct index_state *istate,1014const char*ext,void*data,unsigned long sz)1015{1016switch(CACHE_EXT(ext)) {1017case CACHE_EXT_TREE:1018 istate->cache_tree =cache_tree_read(data, sz);1019break;1020default:1021if(*ext <'A'||'Z'< *ext)1022returnerror("index uses %.4s extension, which we do not understand",1023 ext);1024fprintf(stderr,"ignoring %.4s extension\n", ext);1025break;1026}1027return0;1028}10291030intread_index(struct index_state *istate)1031{1032returnread_index_from(istate,get_index_file());1033}10341035static voidconvert_from_disk(struct ondisk_cache_entry *ondisk,struct cache_entry *ce)1036{1037size_t len;10381039 ce->ce_ctime =ntohl(ondisk->ctime.sec);1040 ce->ce_mtime =ntohl(ondisk->mtime.sec);1041 ce->ce_dev =ntohl(ondisk->dev);1042 ce->ce_ino =ntohl(ondisk->ino);1043 ce->ce_mode =ntohl(ondisk->mode);1044 ce->ce_uid =ntohl(ondisk->uid);1045 ce->ce_gid =ntohl(ondisk->gid);1046 ce->ce_size =ntohl(ondisk->size);1047/* On-disk flags are just 16 bits */1048 ce->ce_flags =ntohs(ondisk->flags);1049hashcpy(ce->sha1, ondisk->sha1);10501051 len = ce->ce_flags & CE_NAMEMASK;1052if(len == CE_NAMEMASK)1053 len =strlen(ondisk->name);1054/*1055 * NEEDSWORK: If the original index is crafted, this copy could1056 * go unchecked.1057 */1058memcpy(ce->name, ondisk->name, len +1);1059}10601061staticinlinesize_testimate_cache_size(size_t ondisk_size,unsigned int entries)1062{1063long per_entry;10641065 per_entry =sizeof(struct cache_entry) -sizeof(struct ondisk_cache_entry);10661067/*1068 * Alignment can cause differences. This should be "alignof", but1069 * since that's a gcc'ism, just use the size of a pointer.1070 */1071 per_entry +=sizeof(void*);1072return ondisk_size + entries*per_entry;1073}10741075/* remember to discard_cache() before reading a different cache! */1076intread_index_from(struct index_state *istate,const char*path)1077{1078int fd, i;1079struct stat st;1080unsigned long src_offset, dst_offset;1081struct cache_header *hdr;1082void*mmap;1083size_t mmap_size;10841085 errno = EBUSY;1086if(istate->alloc)1087return istate->cache_nr;10881089 errno = ENOENT;1090 istate->timestamp =0;1091 fd =open(path, O_RDONLY);1092if(fd <0) {1093if(errno == ENOENT)1094return0;1095die("index file open failed (%s)",strerror(errno));1096}10971098if(fstat(fd, &st))1099die("cannot stat the open index (%s)",strerror(errno));11001101 errno = EINVAL;1102 mmap_size =xsize_t(st.st_size);1103if(mmap_size <sizeof(struct cache_header) +20)1104die("index file smaller than expected");11051106 mmap =xmmap(NULL, mmap_size, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd,0);1107close(fd);1108if(mmap == MAP_FAILED)1109die("unable to map index file");11101111 hdr = mmap;1112if(verify_hdr(hdr, mmap_size) <0)1113goto unmap;11141115 istate->cache_nr =ntohl(hdr->hdr_entries);1116 istate->cache_alloc =alloc_nr(istate->cache_nr);1117 istate->cache =xcalloc(istate->cache_alloc,sizeof(struct cache_entry *));11181119/*1120 * The disk format is actually larger than the in-memory format,1121 * due to space for nsec etc, so even though the in-memory one1122 * has room for a few more flags, we can allocate using the same1123 * index size1124 */1125 istate->alloc =xmalloc(estimate_cache_size(mmap_size, istate->cache_nr));11261127 src_offset =sizeof(*hdr);1128 dst_offset =0;1129for(i =0; i < istate->cache_nr; i++) {1130struct ondisk_cache_entry *disk_ce;1131struct cache_entry *ce;11321133 disk_ce = (struct ondisk_cache_entry *)((char*)mmap + src_offset);1134 ce = (struct cache_entry *)((char*)istate->alloc + dst_offset);1135convert_from_disk(disk_ce, ce);1136set_index_entry(istate, i, ce);11371138 src_offset +=ondisk_ce_size(ce);1139 dst_offset +=ce_size(ce);1140}1141 istate->timestamp = st.st_mtime;1142while(src_offset <= mmap_size -20-8) {1143/* After an array of active_nr index entries,1144 * there can be arbitrary number of extended1145 * sections, each of which is prefixed with1146 * extension name (4-byte) and section length1147 * in 4-byte network byte order.1148 */1149unsigned long extsize;1150memcpy(&extsize, (char*)mmap + src_offset +4,4);1151 extsize =ntohl(extsize);1152if(read_index_extension(istate,1153(const char*) mmap + src_offset,1154(char*) mmap + src_offset +8,1155 extsize) <0)1156goto unmap;1157 src_offset +=8;1158 src_offset += extsize;1159}1160munmap(mmap, mmap_size);1161return istate->cache_nr;11621163unmap:1164munmap(mmap, mmap_size);1165 errno = EINVAL;1166die("index file corrupt");1167}11681169intdiscard_index(struct index_state *istate)1170{1171 istate->cache_nr =0;1172 istate->cache_changed =0;1173 istate->timestamp =0;1174free_hash(&istate->name_hash);1175cache_tree_free(&(istate->cache_tree));1176free(istate->alloc);1177 istate->alloc = NULL;11781179/* no need to throw away allocated active_cache */1180return0;1181}11821183#define WRITE_BUFFER_SIZE 81921184static unsigned char write_buffer[WRITE_BUFFER_SIZE];1185static unsigned long write_buffer_len;11861187static intce_write_flush(SHA_CTX *context,int fd)1188{1189unsigned int buffered = write_buffer_len;1190if(buffered) {1191SHA1_Update(context, write_buffer, buffered);1192if(write_in_full(fd, write_buffer, buffered) != buffered)1193return-1;1194 write_buffer_len =0;1195}1196return0;1197}11981199static intce_write(SHA_CTX *context,int fd,void*data,unsigned int len)1200{1201while(len) {1202unsigned int buffered = write_buffer_len;1203unsigned int partial = WRITE_BUFFER_SIZE - buffered;1204if(partial > len)1205 partial = len;1206memcpy(write_buffer + buffered, data, partial);1207 buffered += partial;1208if(buffered == WRITE_BUFFER_SIZE) {1209 write_buffer_len = buffered;1210if(ce_write_flush(context, fd))1211return-1;1212 buffered =0;1213}1214 write_buffer_len = buffered;1215 len -= partial;1216 data = (char*) data + partial;1217}1218return0;1219}12201221static intwrite_index_ext_header(SHA_CTX *context,int fd,1222unsigned int ext,unsigned int sz)1223{1224 ext =htonl(ext);1225 sz =htonl(sz);1226return((ce_write(context, fd, &ext,4) <0) ||1227(ce_write(context, fd, &sz,4) <0)) ? -1:0;1228}12291230static intce_flush(SHA_CTX *context,int fd)1231{1232unsigned int left = write_buffer_len;12331234if(left) {1235 write_buffer_len =0;1236SHA1_Update(context, write_buffer, left);1237}12381239/* Flush first if not enough space for SHA1 signature */1240if(left +20> WRITE_BUFFER_SIZE) {1241if(write_in_full(fd, write_buffer, left) != left)1242return-1;1243 left =0;1244}12451246/* Append the SHA1 signature at the end */1247SHA1_Final(write_buffer + left, context);1248 left +=20;1249return(write_in_full(fd, write_buffer, left) != left) ? -1:0;1250}12511252static voidce_smudge_racily_clean_entry(struct cache_entry *ce)1253{1254/*1255 * The only thing we care about in this function is to smudge the1256 * falsely clean entry due to touch-update-touch race, so we leave1257 * everything else as they are. We are called for entries whose1258 * ce_mtime match the index file mtime.1259 */1260struct stat st;12611262if(lstat(ce->name, &st) <0)1263return;1264if(ce_match_stat_basic(ce, &st))1265return;1266if(ce_modified_check_fs(ce, &st)) {1267/* This is "racily clean"; smudge it. Note that this1268 * is a tricky code. At first glance, it may appear1269 * that it can break with this sequence:1270 *1271 * $ echo xyzzy >frotz1272 * $ git-update-index --add frotz1273 * $ : >frotz1274 * $ sleep 31275 * $ echo filfre >nitfol1276 * $ git-update-index --add nitfol1277 *1278 * but it does not. When the second update-index runs,1279 * it notices that the entry "frotz" has the same timestamp1280 * as index, and if we were to smudge it by resetting its1281 * size to zero here, then the object name recorded1282 * in index is the 6-byte file but the cached stat information1283 * becomes zero --- which would then match what we would1284 * obtain from the filesystem next time we stat("frotz").1285 *1286 * However, the second update-index, before calling1287 * this function, notices that the cached size is 61288 * bytes and what is on the filesystem is an empty1289 * file, and never calls us, so the cached size information1290 * for "frotz" stays 6 which does not match the filesystem.1291 */1292 ce->ce_size =0;1293}1294}12951296static intce_write_entry(SHA_CTX *c,int fd,struct cache_entry *ce)1297{1298int size =ondisk_ce_size(ce);1299struct ondisk_cache_entry *ondisk =xcalloc(1, size);13001301 ondisk->ctime.sec =htonl(ce->ce_ctime);1302 ondisk->ctime.nsec =0;1303 ondisk->mtime.sec =htonl(ce->ce_mtime);1304 ondisk->mtime.nsec =0;1305 ondisk->dev =htonl(ce->ce_dev);1306 ondisk->ino =htonl(ce->ce_ino);1307 ondisk->mode =htonl(ce->ce_mode);1308 ondisk->uid =htonl(ce->ce_uid);1309 ondisk->gid =htonl(ce->ce_gid);1310 ondisk->size =htonl(ce->ce_size);1311hashcpy(ondisk->sha1, ce->sha1);1312 ondisk->flags =htons(ce->ce_flags);1313memcpy(ondisk->name, ce->name,ce_namelen(ce));13141315returnce_write(c, fd, ondisk, size);1316}13171318intwrite_index(struct index_state *istate,int newfd)1319{1320 SHA_CTX c;1321struct cache_header hdr;1322int i, err, removed;1323struct cache_entry **cache = istate->cache;1324int entries = istate->cache_nr;13251326for(i = removed =0; i < entries; i++)1327if(cache[i]->ce_flags & CE_REMOVE)1328 removed++;13291330 hdr.hdr_signature =htonl(CACHE_SIGNATURE);1331 hdr.hdr_version =htonl(2);1332 hdr.hdr_entries =htonl(entries - removed);13331334SHA1_Init(&c);1335if(ce_write(&c, newfd, &hdr,sizeof(hdr)) <0)1336return-1;13371338for(i =0; i < entries; i++) {1339struct cache_entry *ce = cache[i];1340if(ce->ce_flags & CE_REMOVE)1341continue;1342if(is_racy_timestamp(istate, ce))1343ce_smudge_racily_clean_entry(ce);1344if(ce_write_entry(&c, newfd, ce) <0)1345return-1;1346}13471348/* Write extension data here */1349if(istate->cache_tree) {1350struct strbuf sb;13511352strbuf_init(&sb,0);1353cache_tree_write(&sb, istate->cache_tree);1354 err =write_index_ext_header(&c, newfd, CACHE_EXT_TREE, sb.len) <01355||ce_write(&c, newfd, sb.buf, sb.len) <0;1356strbuf_release(&sb);1357if(err)1358return-1;1359}1360returnce_flush(&c, newfd);1361}