@ -564,6 +564,54 @@ def CMDpopulate(parser, args):
mirror . populate ( * * kwargs )
@subcommand.usage ( ' Fetch new commits into cache and current checkout ' )
def CMDfetch ( parser , args ) :
""" Update mirror, and fetch in cwd. """
parser . add_option ( ' --all ' , action = ' store_true ' , help = ' Fetch all remotes ' )
options , args = parser . parse_args ( args )
# Figure out which remotes to fetch. This mimics the behavior of regular
# 'git fetch'. Note that in the case of "stacked" or "pipelined" branches,
# this will NOT try to traverse up the branching structure to find the
# ultimate remote to update.
remotes = [ ]
if options . all :
assert not args , ' fatal: fetch --all does not take a repository argument '
remotes = subprocess . check_output ( [ Mirror . git_exe , ' remote ' ] ) . splitlines ( )
elif args :
remotes = args
else :
current_branch = subprocess . check_output (
[ Mirror . git_exe , ' rev-parse ' , ' --abbrev-ref ' , ' HEAD ' ] ) . strip ( )
if current_branch != ' HEAD ' :
upstream = subprocess . check_output (
[ Mirror . git_exe , ' config ' , ' branch. %s .remote ' % current_branch ]
) . strip ( )
if upstream and upstream != ' . ' :
remotes = [ upstream ]
if not remotes :
remotes = [ ' origin ' ]
cachepath = Mirror . GetCachePath ( )
git_dir = os . path . abspath ( subprocess . check_output (
[ Mirror . git_exe , ' rev-parse ' , ' --git-dir ' ] ) )
git_dir = os . path . abspath ( git_dir )
if git_dir . startswith ( cachepath ) :
mirror = Mirror . FromPath ( git_dir )
mirror . populate ( )
return 0
for remote in remotes :
remote_url = subprocess . check_output (
[ Mirror . git_exe , ' config ' , ' remote. %s .url ' % remote ] ) . strip ( )
if remote_url . startswith ( cachepath ) :
mirror = Mirror . FromPath ( remote_url )
mirror . print = lambda * args : None
print ( ' Updating git cache... ' )
mirror . populate ( )
subprocess . check_call ( [ Mirror . git_exe , ' fetch ' , remote ] )
return 0
@subcommand.usage ( ' [url of repo to unlock, or -a|--all] ' )
def CMDunlock ( parser , args ) :
""" Unlock one or all repos if their lock files are still around. """