diff --git a/scripts/release/stage-tasks.py b/scripts/release/stage-tasks.py index 2fc9fdf..01778f2 100755 --- a/scripts/release/stage-tasks.py +++ b/scripts/release/stage-tasks.py @@ -129,16 +129,17 @@ def runAntivirusCheck(productName, version, buildNumber, stageServer, def pushToMirrors(productName, version, buildNumber, stageServer, stageUsername=None, stageSshKey=None, excludes=None, extra_excludes=None, dryRun=False, overwrite=False): """ excludes overrides DEFAULT_RSYNC_EXCLUDES, extra_exludes will be appended to DEFAULT_RSYNC_EXCLUDES. """ source_dir = makeCandidatesDir(productName, version, buildNumber) + hidden_dir = makeCandidatesDir(productName, version, "%s.rsync" % buildNumber) target_dir = makeReleasesDir(productName, version) if not excludes: excludes = DEFAULT_RSYNC_EXCLUDES if extra_excludes: excludes += ['--exclude=%s' % ex for ex in extra_excludes] # fail/warn if target directory exists depending on dry run mode @@ -149,27 +150,32 @@ def pushToMirrors(productName, version, buildNumber, stageServer, if overwrite: log.info('target directory %s exists, but overwriting files as requested' % target_dir) elif dryRun: log.warning('WARN: target directory %s exists', target_dir) else: raise if not dryRun: - run_remote_cmd(['mkdir', '-p', target_dir], server=stageServer, - username=stageUsername, sshKey=stageSshKey) + rsync_cmd = ['rsync', '-av'] + # Copy all file using hadrlinks to a hidden directory + run_remote_cmd(['cp', '-avl', source_dir, hidden_dir], + server=stageServer, username=stageUsername, + sshKey=stageSshKey) + # delete not needed files + run_remote_cmd( + rsync_cmd + excludes + ["--delete-excluded", source_dir, + hidden_dir], + server=stageServer, username=stageUsername, sshKey=stageSshKey) + # Move to the target directory finally + run_remote_cmd(['mv', '-vf', hidden_dir, target_dir], + server=stageServer, username=stageUsername, sshKey=stageSshKey) run_remote_cmd( ['chmod', 'u=rwx,g=rxs,o=rx', target_dir], server=stageServer, username=stageUsername, sshKey=stageSshKey) - rsync_cmd = ['rsync', '-av'] - if dryRun: - rsync_cmd.append('-n') - run_remote_cmd(rsync_cmd + excludes + [source_dir, target_dir], - server=stageServer, username=stageUsername, - sshKey=stageSshKey) indexFileTemplate = """\ Thanks for your interest in Firefox %(version)s