contrib/genosxversion.py
author Pulkit Goyal <7895pulkit@gmail.com>
Wed, 06 Jan 2021 16:18:06 +0530
changeset 46235 0babe12ef35d
parent 45397 148d177a4f2d
child 48875 6000f5b25c9b
permissions -rwxr-xr-x
sharesafe: introduce functionality to automatically upgrade shares In past few months, we have developed a `share-safe` mode for sharing repository in which share source requirements and config values are shared with the shares. To get it rolling, an important task is to get these shares automatically upgraded. We are focusing on an installation where shares are created by scripts and test jobs. It will be difficult to manually upgrade these and we need some functionality to do so automatically. This patch introduces a config option to deal with it. If all of the following conditions are met, we upgrade the share repository automatically: * If the config option is enabled * Share source repository is share-safe enabled * Share is not share-safe enabled * Any command is run in the share Upgrading the share is pretty easy as it involves only editing the requirements file. Differential Revision: https://phab.mercurial-scm.org/D9679
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
33594
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
     1
#!/usr/bin/env python2
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
     2
from __future__ import absolute_import, print_function
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
     3
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
     4
import argparse
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
     5
import os
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
     6
import subprocess
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
     7
import sys
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
     8
45397
148d177a4f2d genosxversion: don't give up if we can't find a path to hg libraries
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
     9
try:
148d177a4f2d genosxversion: don't give up if we can't find a path to hg libraries
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    10
    # Always load hg libraries from the hg we can find on $PATH.
148d177a4f2d genosxversion: don't give up if we can't find a path to hg libraries
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    11
    hglib = subprocess.check_output(['hg', 'debuginstall', '-T', '{hgmodules}'])
148d177a4f2d genosxversion: don't give up if we can't find a path to hg libraries
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    12
    sys.path.insert(0, os.path.dirname(hglib))
148d177a4f2d genosxversion: don't give up if we can't find a path to hg libraries
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    13
except subprocess.CalledProcessError:
148d177a4f2d genosxversion: don't give up if we can't find a path to hg libraries
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    14
    # We're probably running with a PyOxidized Mercurial, so just
148d177a4f2d genosxversion: don't give up if we can't find a path to hg libraries
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    15
    # proceed and hope it works out okay.
148d177a4f2d genosxversion: don't give up if we can't find a path to hg libraries
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    16
    pass
33594
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    17
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    18
from mercurial import util
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    19
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    20
ap = argparse.ArgumentParser()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42815
diff changeset
    21
ap.add_argument(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42815
diff changeset
    22
    '--paranoid',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42815
diff changeset
    23
    action='store_true',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42815
diff changeset
    24
    help=(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42815
diff changeset
    25
        "Be paranoid about how version numbers compare and "
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42815
diff changeset
    26
        "produce something that's more likely to sort "
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42815
diff changeset
    27
        "reasonably."
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42815
diff changeset
    28
    ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42815
diff changeset
    29
)
33594
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    30
ap.add_argument('--selftest', action='store_true', help='Run self-tests.')
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    31
ap.add_argument('versionfile', help='Path to a valid mercurial __version__.py')
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    32
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42815
diff changeset
    33
33594
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    34
def paranoidver(ver):
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    35
    """Given an hg version produce something that distutils can sort.
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    36
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    37
    Some Mac package management systems use distutils code in order to
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    38
    figure out upgrades, which makes life difficult. The test case is
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    39
    a reduced version of code in the Munki tool used by some large
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    40
    organizations to centrally manage OS X packages, which is what
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    41
    inspired this kludge.
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    42
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    43
    >>> paranoidver('3.4')
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    44
    '3.4.0'
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    45
    >>> paranoidver('3.4.2')
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    46
    '3.4.2'
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    47
    >>> paranoidver('3.0-rc+10')
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    48
    '2.9.9999-rc+10'
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    49
    >>> paranoidver('4.2+483-5d44d7d4076e')
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    50
    '4.2.0+483-5d44d7d4076e'
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    51
    >>> paranoidver('4.2.1+598-48d1e1214d8c')
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    52
    '4.2.1+598-48d1e1214d8c'
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    53
    >>> paranoidver('4.3-rc')
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    54
    '4.2.9999-rc'
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    55
    >>> paranoidver('4.3')
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    56
    '4.3.0'
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    57
    >>> from distutils import version
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    58
    >>> class LossyPaddedVersion(version.LooseVersion):
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    59
    ...     '''Subclass version.LooseVersion to compare things like
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    60
    ...     "10.6" and "10.6.0" as equal'''
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    61
    ...     def __init__(self, s):
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    62
    ...             self.parse(s)
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    63
    ...
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    64
    ...     def _pad(self, version_list, max_length):
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    65
    ...         'Pad a version list by adding extra 0 components to the end'
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    66
    ...         # copy the version_list so we don't modify it
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    67
    ...         cmp_list = list(version_list)
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    68
    ...         while len(cmp_list) < max_length:
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    69
    ...             cmp_list.append(0)
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    70
    ...         return cmp_list
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    71
    ...
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    72
    ...     def __cmp__(self, other):
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    73
    ...         if isinstance(other, str):
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    74
    ...             other = MunkiLooseVersion(other)
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    75
    ...         max_length = max(len(self.version), len(other.version))
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    76
    ...         self_cmp_version = self._pad(self.version, max_length)
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    77
    ...         other_cmp_version = self._pad(other.version, max_length)
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    78
    ...         return cmp(self_cmp_version, other_cmp_version)
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    79
    >>> def testver(older, newer):
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    80
    ...   o = LossyPaddedVersion(paranoidver(older))
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    81
    ...   n = LossyPaddedVersion(paranoidver(newer))
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    82
    ...   return o < n
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    83
    >>> testver('3.4', '3.5')
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    84
    True
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    85
    >>> testver('3.4.0', '3.5-rc')
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    86
    True
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    87
    >>> testver('3.4-rc', '3.5')
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    88
    True
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    89
    >>> testver('3.4-rc+10-deadbeef', '3.5')
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    90
    True
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    91
    >>> testver('3.4.2', '3.5-rc')
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    92
    True
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    93
    >>> testver('3.4.2', '3.5-rc+10-deadbeef')
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    94
    True
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    95
    >>> testver('4.2+483-5d44d7d4076e', '4.2.1+598-48d1e1214d8c')
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    96
    True
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    97
    >>> testver('4.3-rc', '4.3')
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    98
    True
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
    99
    >>> testver('4.3', '4.3-rc')
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   100
    False
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   101
    """
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   102
    major, minor, micro, extra = util.versiontuple(ver, n=4)
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   103
    if micro is None:
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   104
        micro = 0
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   105
    if extra:
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   106
        if extra.startswith('rc'):
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   107
            if minor == 0:
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   108
                major -= 1
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   109
                minor = 9
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   110
            else:
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   111
                minor -= 1
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   112
            micro = 9999
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   113
            extra = '-' + extra
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   114
        else:
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   115
            extra = '+' + extra
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   116
    else:
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   117
        extra = ''
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   118
    return '%d.%d.%d%s' % (major, minor, micro, extra)
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   119
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42815
diff changeset
   120
33594
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   121
def main(argv):
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   122
    opts = ap.parse_args(argv[1:])
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   123
    if opts.selftest:
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   124
        import doctest
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42815
diff changeset
   125
33594
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   126
        doctest.testmod()
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   127
        return
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   128
    with open(opts.versionfile) as f:
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   129
        for l in f:
38734
25880ddf9a86 macosx: fixing macOS version generation after db9d1dd01bf0
Rodrigo Damazio <rdamazio@google.com>
parents: 33594
diff changeset
   130
            if l.startswith('version = b'):
33594
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   131
                # version number is entire line minus the quotes
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42815
diff changeset
   132
                ver = l[len('version = b') + 1 : -2]
33594
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   133
                break
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   134
    if opts.paranoid:
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   135
        print(paranoidver(ver))
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   136
    else:
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   137
        print(ver)
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   138
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42815
diff changeset
   139
33594
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   140
if __name__ == '__main__':
283a7da602ae osx: new script for generating OS X package versions
Augie Fackler <augie@google.com>
parents:
diff changeset
   141
    main(sys.argv)