def METHOD_NAME():
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument('--directory', '-d', type=str, default='',
                        dest='directory',
                        help=('Directory to use for a local git '
                              'repository.  By default, this script clones '
                              'the nomulus repo into a temporary directory '
                              'which is deleted after the script is run.  '
                              'This option allows you to specify the '
                              'directory and causes it to be retained (not '
                              'deleted) after the script is run, allowing '
                              'it to be reused for subsequent runs, speeding '
                              'them up considerably.'))
    parser.add_argument('user', type=str,
                        help=('The name of the user on github.  The full '
                              'github repository name is presumed to be '
                              '"$user/nomulus".'))
    parser.add_argument('branch', type=str,
                        help='The git branch containing the changes.')
    args = parser.parse_args()
    user = args.user
    branch = args.branch
    if not args.directory:
        tempdir = tempfile.TemporaryDirectory()
        dir = tempdir.name
    else:
        dir = args.directory
    # Either clone or fetch the master branch if it exists.
    if args.directory and os.path.exists(dir):
        pr(f'Reusing directory {dir}\n')
        os.chdir(dir)
        run('git', 'fetch', 'git@github.com:google/nomulus', 'master')
        run('git', 'checkout', 'origin/master')
    else:
        run('git', 'clone', 'git@github.com:google/nomulus', dir)
        os.chdir(dir)
    old_packages = get_all_package_versions('.')
    run('git', 'fetch', f'https://github.com/{user}/nomulus.git',
        f'{branch}:{branch}')
    run('git', 'checkout', branch)
    new_packages = get_all_package_versions('.')
    if new_packages != old_packages:
        pr('\n\nPackage version change report:\n')
        pr('change package-name: {old versions} -> {new versions}\n')
        pr('=====================================================\n\n')
        for package, new_versions in new_packages.items():
            old_versions = old_packages.get(package)
            if not old_versions:
                pr('added ', b':'.join(package), ': {',
                   format_versions(new_versions, set(), GREEN),
                   '}\n')
            elif new_versions != old_versions:
                # Print out "package-name: {old versions} -> {new versions} with
                # pretty colors.
                formatted_old_versions = (
                    format_versions(old_versions, new_versions, RED))
                formatted_new_versions = (
                    format_versions(new_versions, old_versions, GREEN))
                pr('updated ', b':'.join(package), ': {',
                   formatted_old_versions, '} -> {',
                   formatted_new_versions, '}\n')
        # Print the list of packages that were removed.
        for package in old_packages:
            if package not in new_packages:
                pr('removed ', b':'.join(package), '\n')
    else:
        pr('Package versions not updated!\n')
    if args.directory:
        pr(f'\nRetaining git directory {dir}, to delete: rm -rf {dir}\n')