newren@xxxxxxxxx wrote on Mon, 22 Aug 2011 16:28 -0600: > I want to do something really close to > git update-index -q --refresh > However, I want it to assume the files in the working tree are > unmodified from the index (i.e. don't waste time opening and reading > the file) and simply update the stat information in the index to match > the current files on disk. > > Yes, I know that would be unsafe if the files don't have the > appropriate contents; I'm promising that they do have the appropriate > contents and don't want to pay the performance penalty for git to > verify. Is that possible? I have the same issue in my workflow, and agree with Junio that this is just too bizarre to put in the code. Here's the script I use, relying on dulwich, that you might find helpful. -- Pete ------8<------------------ #!/usr/bin/env python2.6 # git-index-clone - Update index after a volume clone # Copyright 2010 Pete Wyckoff <pw@xxxxxxxx> import sys import os from dulwich.index import Index index_name = ".git/index" # # Debugging option: show the index entry for just one file name, # e.g. git-index-clone file/name/in/tree # def show_entry(name): idx = Index(index_name) if name not in idx: print >>sys.stderr, "No index entry", name return print "index", idx[name] t = update_from_stat(idx[name], name) print "stat ", t # # Stat the file, return the new tuple # def update_from_stat(idx, name): (ctime, mtime, dev, ino, mode, uid, gid, size, sha, flags) = idx sb = os.lstat(name) # times are float; dulwich converts to (sec, ns) on write ctime = sb.st_ctime mtime = sb.st_mtime dev = sb.st_dev ino = sb.st_ino # assume mode unchanged uid = sb.st_uid gid = sb.st_gid # assume size, sha, flags unchanged return (ctime, mtime, dev, ino, mode, uid, gid, size, sha, flags) def convert(): idx_in = Index(index_name) os.unlink(index_name) idx_out = Index(index_name) for name in idx_in: idx_out[name] = update_from_stat(idx_in[name], name) idx_out.write() os.chmod(index_name, 0644) # drop exec perms def usage(): print >>sys.stderr, "Usage: %s [<index entry name>]\n" sys.exit(1) def main(): if len(sys.argv) == 1: convert() elif len(sys.argv) == 2: show_entry(sys.argv[1]) else: usage() return 0 if __name__ == "__main__": sys.exit(main()) -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html