~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to scripts/ftpmaster-tools/sync-source.py

  • Committer: Launchpad Patch Queue Manager
  • Date: 2011-09-19 04:01:37 UTC
  • mfrom: (13970.7.23 port-to-LaunchpadScript)
  • Revision ID: launchpad@pqm.canonical.com-20110919040137-sr8154o9tfptnqir
[r=sinzui][no-qa] Port a dozen scripts to LaunchpadScript,
        removing their direct initZopeless dependency.

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
will become a matter of simply 'publishing' source from Debian unstable
15
15
wherever) into Ubuntu dapper and the whole fake upload trick can go away.
16
16
"""
 
17
 
 
18
import _pythonpath
 
19
 
17
20
import commands
18
21
import errno
19
 
import optparse
20
22
import os
21
23
import re
22
24
import shutil
25
27
import tempfile
26
28
import urllib
27
29
 
28
 
import _pythonpath
29
30
from _syncorigins import origins
30
31
import apt_pkg
31
 
from contrib.glock import GlobalLock
32
32
import dak_utils
33
33
from debian.deb822 import Dsc
34
34
from zope.component import getUtility
37
37
    cursor,
38
38
    sqlvalues,
39
39
    )
40
 
from canonical.launchpad.scripts import (
41
 
    execute_zcml_for_scripts,
42
 
    logger,
43
 
    logger_options,
44
 
    )
45
40
from canonical.librarian.client import LibrarianClient
46
 
from canonical.lp import initZopeless
47
41
from lp.archiveuploader.utils import (
48
42
    DpkgSourceError,
49
43
    extract_dpkg_source,
51
45
from lp.registry.interfaces.distribution import IDistributionSet
52
46
from lp.registry.interfaces.person import IPersonSet
53
47
from lp.registry.interfaces.pocket import PackagePublishingPocket
 
48
from lp.services.scripts.base import LaunchpadScript
54
49
from lp.soyuz.enums import (
55
50
    PackagePublishingStatus,
56
51
    re_bug_numbers,
72
67
 
73
68
Blacklisted = None
74
69
Library = None
75
 
Lock = None
76
70
Log = None
77
71
Options = None
78
72
 
648
642
        print "Total:                    %s" % (stat_count)
649
643
 
650
644
 
651
 
def options_setup():
652
 
    global Log, Options
653
 
 
654
 
    parser = optparse.OptionParser()
655
 
    logger_options(parser)
656
 
    parser.add_option("-a", "--all", dest="all",
657
 
                      default=False, action="store_true",
658
 
                      help="sync all packages")
659
 
    parser.add_option("-b", "--requested-by", dest="requestor",
660
 
                      help="who the sync was requested by")
661
 
    parser.add_option("-f", "--force", dest="force",
662
 
                      default=False, action="store_true",
663
 
                      help="force sync over the top of Ubuntu changes")
664
 
    parser.add_option("-F", "--force-more", dest="forcemore",
665
 
                      default=False, action="store_true",
666
 
                      help="force sync even when components don't match")
667
 
    parser.add_option("-n", "--noaction", dest="action",
668
 
                      default=True, action="store_false",
669
 
                      help="don't do anything")
670
 
 
671
 
    # XXX cprov 2007-07-03: Why the heck doesn't -v provide by logger provide
672
 
    # Options.verbose?
673
 
    parser.add_option("-V", "--moreverbose", dest="moreverbose",
674
 
                      default=False, action="store_true",
675
 
                      help="be even more verbose")
676
 
 
677
 
    # Options controlling where to sync packages to:
678
 
    parser.add_option("-c", "--to-component", dest="tocomponent",
679
 
                      help="limit syncs to packages in COMPONENT")
680
 
    parser.add_option("-d", "--to-distro", dest="todistro",
681
 
                      default='ubuntu', help="sync to DISTRO")
682
 
    parser.add_option("-s", "--to-suite", dest="tosuite",
683
 
                      help="sync to SUITE (aka distroseries)")
684
 
 
685
 
    # Options controlling where to sync packages from:
686
 
    parser.add_option("-C", "--from-component", dest="fromcomponent",
687
 
                      help="sync from COMPONENT")
688
 
    parser.add_option("-D", "--from-distro", dest="fromdistro",
689
 
                      default='debian', help="sync from DISTRO")
690
 
    parser.add_option("-S", "--from-suite", dest="fromsuite",
691
 
                      help="sync from SUITE (aka distroseries)")
692
 
    parser.add_option("-B", "--blacklist", dest="blacklist_path",
693
 
                      default="/srv/launchpad.net/dak/sync-blacklist.txt",
694
 
                      help="Blacklist file path.")
695
 
 
696
 
 
697
 
    (Options, arguments) = parser.parse_args()
698
 
 
699
 
    distro = Options.fromdistro.lower()
700
 
    if not Options.fromcomponent:
701
 
        Options.fromcomponent = origins[distro]["default component"]
702
 
    if not Options.fromsuite:
703
 
        Options.fromsuite = origins[distro]["default suite"]
704
 
 
705
 
    # Sanity checks on options
706
 
    if not Options.all and not arguments:
707
 
        dak_utils.fubar(
708
 
            "Need -a/--all or at least one package name as an argument.")
709
 
 
710
 
    return arguments
711
 
 
712
 
 
713
645
def objectize_options():
714
646
    """Parse given options.
715
647
 
787
719
    return blacklist
788
720
 
789
721
 
790
 
def init():
791
 
    global Blacklisted, Library, Lock, Log, Options
792
 
 
793
 
    apt_pkg.init()
794
 
 
795
 
    arguments = options_setup()
796
 
 
797
 
    Log = logger(Options, "sync-source")
798
 
 
799
 
    Log.debug("Acquiring lock")
800
 
    Lock = GlobalLock('/var/lock/launchpad-sync-source.lock')
801
 
    Lock.acquire(blocking=True)
802
 
 
803
 
    Log.debug("Initializing connection.")
804
 
    execute_zcml_for_scripts()
805
 
    initZopeless(dbuser="ro")
806
 
 
807
 
    Library = LibrarianClient()
808
 
 
809
 
    objectize_options()
810
 
 
811
 
    Blacklisted = parseBlacklist(Options.blacklist_path)
812
 
 
813
 
    return arguments
814
 
 
815
 
 
816
 
def main():
817
 
    arguments = init()
818
 
 
819
 
    origin = origins[Options.fromdistro]
820
 
    origin["suite"] = Options.fromsuite
821
 
    origin["component"] = Options.fromcomponent
822
 
 
823
 
    Sources = read_Sources("Sources", origin)
824
 
    Suite = read_current_source(
825
 
        Options.tosuite, Options.tocomponent, arguments)
826
 
    current_binaries = read_current_binaries(Options.tosuite)
827
 
    do_diff(Sources, Suite, origin, arguments, current_binaries)
 
722
class SyncSourceScript(LaunchpadScript):
 
723
 
 
724
    def add_my_options(self):
 
725
        self.parser.add_option("-a", "--all", dest="all",
 
726
                        default=False, action="store_true",
 
727
                        help="sync all packages")
 
728
        self.parser.add_option("-b", "--requested-by", dest="requestor",
 
729
                        help="who the sync was requested by")
 
730
        self.parser.add_option("-f", "--force", dest="force",
 
731
                        default=False, action="store_true",
 
732
                        help="force sync over the top of Ubuntu changes")
 
733
        self.parser.add_option("-F", "--force-more", dest="forcemore",
 
734
                        default=False, action="store_true",
 
735
                        help="force sync even when components don't match")
 
736
        self.parser.add_option("-n", "--noaction", dest="action",
 
737
                        default=True, action="store_false",
 
738
                        help="don't do anything")
 
739
 
 
740
        # Options controlling where to sync packages to:
 
741
        self.parser.add_option("-c", "--to-component", dest="tocomponent",
 
742
                        help="limit syncs to packages in COMPONENT")
 
743
        self.parser.add_option("-d", "--to-distro", dest="todistro",
 
744
                        default='ubuntu', help="sync to DISTRO")
 
745
        self.parser.add_option("-s", "--to-suite", dest="tosuite",
 
746
                        help="sync to SUITE (aka distroseries)")
 
747
 
 
748
        # Options controlling where to sync packages from:
 
749
        self.parser.add_option("-C", "--from-component", dest="fromcomponent",
 
750
                        help="sync from COMPONENT")
 
751
        self.parser.add_option("-D", "--from-distro", dest="fromdistro",
 
752
                        default='debian', help="sync from DISTRO")
 
753
        self.parser.add_option("-S", "--from-suite", dest="fromsuite",
 
754
                        help="sync from SUITE (aka distroseries)")
 
755
        self.parser.add_option("-B", "--blacklist", dest="blacklist_path",
 
756
                        default="/srv/launchpad.net/dak/sync-blacklist.txt",
 
757
                        help="Blacklist file path.")
 
758
 
 
759
    def main(self):
 
760
        global Blacklisted, Library, Log, Options
 
761
 
 
762
        Log = self.logger
 
763
        Options = self.options
 
764
 
 
765
        distro = Options.fromdistro.lower()
 
766
        if not Options.fromcomponent:
 
767
            Options.fromcomponent = origins[distro]["default component"]
 
768
        if not Options.fromsuite:
 
769
            Options.fromsuite = origins[distro]["default suite"]
 
770
 
 
771
        # Sanity checks on options
 
772
        if not Options.all and not self.args:
 
773
            dak_utils.fubar(
 
774
                "Need -a/--all or at least one package name as an argument.")
 
775
 
 
776
        apt_pkg.init()
 
777
        Library = LibrarianClient()
 
778
 
 
779
        objectize_options()
 
780
 
 
781
        Blacklisted = parseBlacklist(Options.blacklist_path)
 
782
 
 
783
        origin = origins[Options.fromdistro]
 
784
        origin["suite"] = Options.fromsuite
 
785
        origin["component"] = Options.fromcomponent
 
786
 
 
787
        Sources = read_Sources("Sources", origin)
 
788
        Suite = read_current_source(
 
789
            Options.tosuite, Options.tocomponent, self.args)
 
790
        current_binaries = read_current_binaries(Options.tosuite)
 
791
        do_diff(Sources, Suite, origin, self.args, current_binaries)
828
792
 
829
793
 
830
794
if __name__ == '__main__':
831
 
    main()
 
795
    SyncSourceScript('sync-source', 'ro').lock_and_run()