<commit_before>#!/usr/bin/env python

# Loop of { update repos, call bot.py } to allow things to run unattended
# All command-line options are passed through to bot.py (unless you use --dom-defaults)

# Since this script updates the fuzzing repo, it should be very simple, and use subprocess.call() rather than import

import os
import sys
import platform
import subprocess
import time

path0 = os.path.dirname(os.path.abspath(__file__))

# This junk should be moved to bot.py, OR moved into a config file, OR this file should subprocess-call ITSELF rather than using a while loop.
def buildOptionsASan():
    mozconfig = os.path.expanduser("~/fuzzing/dom/mozconfig/mozconfig-asan")
    srcdir = os.path.expanduser("~/trees/mozilla-central/")
    objdir = srcdir + "obj-firefox-asan/"
    return " ".join(["--mozconfig", mozconfig, "--repoDir", srcdir, "--objDir", objdir])
def domDefaults():
    botArgs = ["--test-type=dom", "--target-time=43200"]
    scl = platform.uname()[1].startswith("fuzzer-") # e.g. "fuzzer-linux5.sec.scl3.mozilla.com" or just "fuzzer-win1"
    if scl:
        botArgs.extend(["--remote-host", "<EMAIL>", "--basedir", "/home/jruderman/scl-fuzz-results/"])
    if (platform.system() == "Linux" and i % 2 == 1) or (platform.system() == "Darwin" and not scl):
        botArgs.extend(["--build-options", buildOptionsASan()])
    print(repr(botArgs))
    return botArgs
def botArgs():
    if sys.argv[1:] == ['--dom-defaults']:
        return domDefaults()
    return sys.argv[1:]

def callWithBackoff(args):
    try:
        subprocess.check_call(args)
    except subprocess.CalledProcessError as e:
        print repr(args)
        print "hit a subprocess error:"
        print repr(e)
        print "Waiting a minute..."
        time.sleep(60)

def once(i):
    print "localLoop #%d!" % i
    callWithBackoff([sys.executable, "-u", os.path.join(path0, 'util', 'reposUpdate.py')])
    callWithBackoff([sys.executable, "-u", os.path.join(path0, 'bot.py')] + botArgs())

def main():
    i = 0
    while True:
        i += 1
        once(i)

if __name__ == "__main__":
    main()
<commit_msg>loopBot.py: if updating any repo fails, start over from the beginning, instead of trying to build+fuzz with fuzzing and mozilla repos that are severely out of sync with each other<commit_after>#!/usr/bin/env python

# Loop of { update repos, call bot.py } to allow things to run unattended
# All command-line options are passed through to bot.py (unless you use --dom-defaults)

# Since this script updates the fuzzing repo, it should be very simple, and use subprocess.call() rather than import

import os
import sys
import platform
import subprocess
import time

path0 = os.path.dirname(os.path.abspath(__file__))

# This junk should be moved to bot.py, OR moved into a config file, OR this file should subprocess-call ITSELF rather than using a while loop.
def buildOptionsASan():
    mozconfig = os.path.expanduser("~/fuzzing/dom/mozconfig/mozconfig-asan")
    srcdir = os.path.expanduser("~/trees/mozilla-central/")
    objdir = srcdir + "obj-firefox-asan/"
    return " ".join(["--mozconfig", mozconfig, "--repoDir", srcdir, "--objDir", objdir])
def domDefaults():
    botArgs = ["--test-type=dom", "--target-time=43200"]
    scl = platform.uname()[1].startswith("fuzzer-") # e.g. "fuzzer-linux5.sec.scl3.mozilla.com" or just "fuzzer-win1"
    if scl:
        botArgs.extend(["--remote-host", "<EMAIL>", "--basedir", "/home/jruderman/scl-fuzz-results/"])
    if (platform.system() == "Linux" and i % 2 == 1) or (platform.system() == "Darwin" and not scl):
        botArgs.extend(["--build-options", buildOptionsASan()])
    print(repr(botArgs))
    return botArgs
def botArgs():
    if sys.argv[1:] == ['--dom-defaults']:
        return domDefaults()
    return sys.argv[1:]

def loopSequence(cmdSequence, waitTime):
    """Call a sequence of commands in a loop. If any fails, sleep(waitTime) and go back to the beginning of the sequence."""
    i = 0
    while True:
        i += 1
        print "localLoop #%d!" % i
        for cmd in cmdSequence:
            try:
                subprocess.check_call(cmd)
            except subprocess.CalledProcessError as e:
                print "Something went wrong when calling: " + repr(cmd)
                print repr(e)
                print "Waiting %d seconds..." % waitTime
                time.sleep(waitTime)
                break

def main():
    loopSequence([
        [sys.executable, "-u", os.path.join(path0, 'util', 'reposUpdate.py')],
        [sys.executable, "-u", os.path.join(path0, 'bot.py')] + botArgs()
    ], 60)

if __name__ == "__main__":
    main()

{'fraction_non_alphanumeric': 0.14535259866292863, 'fraction_numerical': 0.008626266982963123, 'mean_word_length': 3.093556928508385, 'pattern_counts': {'":': 2, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '555566', 'n_tokens_mistral': 1556, 'n_tokens_neox': 1486, 'n_words': 442}