old_contents: import os
  import sha
  
  def gitsha(path):
  	h = sha.sha()
  	data = file(path).read()
  	h.update("blob %d\0" % len(data))
  	h.update(data)
  	return h.hexdigest()
  
  def git_info():
  	commithash = os.popen('git-rev-parse --verify HEAD').read().strip()
  	if os.getuid() == os.stat(".git/index").st_uid:
  		os.system('git-update-index --refresh >/dev/null')
  	else:
  		print "NOT updating git cache, local changes might not be detected"
  	changed = bool(os.popen('git-diff-index -r HEAD').read())
  	return commithash, changed
  
  def snapshot_info():
  	info = file('commithash').read().split('\n')
  	
  	commithash = info[0]
  
  	changed = False
  	for line in [a for a in info[2:] if a]:
  		[mode, tag, sha, path] = line.split(None, 4)
  		if tag != 'blob':
  			continue
  		if gitsha(path) != sha:
  			changed = True
  			break
  	return commithash, changed
  
  def get_info():
  	try:
  		return git_info()
  	except:
  		try:
  			return snapshot_info()
  		except:
  			return 'Unknown', False
  
  def get_info_str():
  	commithash, changed = get_info()
  	if changed:
  		changed = " + local changes"
  	else:
  		changed = ""
  
  	return "%s%s" % (commithash, changed)
  
new_contents: import os
  import sha
  
  def gitsha(path):
  	h = sha.sha()
  	data = file(path).read()
  	h.update("blob %d\0" % len(data))
  	h.update(data)
  	return h.hexdigest()
  
  def git_info():
  	commithash = os.popen('git-rev-parse --verify HEAD 2>/dev/null').read().strip()
  	if not commithash:
  		raise ValueError("Couldn't get hash")
  	if os.getuid() == os.stat(".git/index").st_uid:
  		os.system('git-update-index --refresh >/dev/null')
  	else:
  		print "NOT updating git cache, local changes might not be detected"
  	changed = bool(os.popen('git-diff-index -r HEAD').read())
  	return commithash, changed
  
  def snapshot_info():
  	info = file('commithash').read().split('\n')
  	
  	commithash = info[0]
  
  	changed = False
  	for line in [a for a in info[2:] if a]:
  		[mode, tag, sha, path] = line.split(None, 4)
  		if tag != 'blob':
  			continue
  		if gitsha(path) != sha:
  			changed = True
  			break
  	return commithash, changed
  
  def get_info():
  	try:
  		return git_info()
  	except:
  		try:
  			return snapshot_info()
  		except:
  			return 'Unknown', False
  
  def get_info_str():
  	commithash, changed = get_info()
  	if changed:
  		changed = " + local changes"
  	else:
  		changed = ""
  
  	return "%s%s" % (commithash, changed)
  
subject: Hide "fatal: Not a git repository" error message.