From 44469464d2e4ddbb217f92e962ff85dfd736772e Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Tue, 3 Mar 2009 17:51:01 -0800 Subject: [PATCH] Allow repo forall -c on a mirror by using GIT_DIR as pwd We can permit a forall on a mirror, but only if we put the command into the git repository. Signed-off-by: Shawn O. Pearce --- subcmds/forall.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/subcmds/forall.py b/subcmds/forall.py index acbf18b..bc0d455 100644 --- a/subcmds/forall.py +++ b/subcmds/forall.py @@ -17,9 +17,9 @@ import re import os import sys import subprocess -from command import Command +from command import Command, MirrorSafeCommand -class Forall(Command): +class Forall(Command, MirrorSafeCommand): common = False helpSummary = "Run a shell command in each project" helpUsage = """ @@ -30,7 +30,8 @@ Executes the same shell command in each project. Environment ----------- -pwd is the project's working directory. +pwd is the project's working directory. If the current client is +a mirror client, then pwd is the Git repository. REPO_PROJECT is set to the unique name of the project. @@ -77,6 +78,7 @@ not redirected. cmd.append(cmd[0]) cmd.extend(opt.command[1:]) + mirror = self.manifest.IsMirror rc = 0 for project in self.GetProjects(args): env = dict(os.environ.iteritems()) @@ -88,8 +90,14 @@ not redirected. .ToLocal(project.revision) env['REPO_RREV'] = project.revision + if mirror: + env['GIT_DIR'] = project.gitdir + cwd = project.gitdir + else: + cwd = project.worktree + p = subprocess.Popen(cmd, - cwd = project.worktree, + cwd = cwd, shell = shell, env = env) r = p.wait()