Пример #1
0
    def run(self):
        while True:
            try:
                if self.die:
                    return
                to_import = self.queue.dequeue()
                if not to_import:
                    return

                print( "Directory %s, file %7d, (%s)" % (to_import.dirpath[-10:], to_import.count, to_import.changesfile) )

                changes = Changes()
                changes.changes_file = to_import.changesfile
                changesfile = os.path.join(to_import.dirpath, to_import.changesfile)
                changes.changes = parse_changes(changesfile, signing_rules=-1)
                changes.changes["fingerprint"] = check_signature(changesfile)
                changes.add_known_changes(to_import.dirpath, session=self.session)
                self.session.commit()

            except InvalidDscError as line:
                warn("syntax error in .dsc file '%s', line %s." % (f, line))

            except ChangesUnicodeError:
                warn("found invalid changes file, not properly utf-8 encoded")

            except KeyboardInterrupt:
                print("Caught C-c; on ImportThread. terminating.")
                self.parent.plsDie()
                sys.exit(1)

            except:
                self.parent.plsDie()
                sys.exit(1)
Пример #2
0
def do_update(self):
    print "Adding known_changes table"

    try:
        c = self.db.cursor()
        c.execute("""
                    CREATE TABLE known_changes (
                    id SERIAL PRIMARY KEY,
                    changesname TEXT NOT NULL,
                    seen TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
                    source TEXT NOT NULL,
                    binaries TEXT NOT NULL,
                    architecture TEXT NOT NULL,
                    version TEXT NOT NULL,
                    distribution TEXT NOT NULL,
                    urgency TEXT NOT NULL,
                    maintainer TEXT NOT NULL,
                    fingerprint TEXT NOT NULL,
                    changedby TEXT NOT NULL,
                    date TEXT NOT NULL,
                    UNIQUE (changesname)
            )
        """)
        c.execute("CREATE INDEX changesname_ind ON known_changes(changesname)")
        c.execute("CREATE INDEX changestimestamp_ind ON known_changes(seen)")
        c.execute("CREATE INDEX changessource_ind ON known_changes(source)")
        c.execute("CREATE INDEX changesdistribution_ind ON known_changes(distribution)")
        c.execute("CREATE INDEX changesurgency_ind ON known_changes(urgency)")

        c.execute("GRANT ALL ON known_changes TO ftpmaster;")
        c.execute("GRANT SELECT ON known_changes TO public;")

        c.execute("UPDATE config SET value = '18' WHERE name = 'db_revision'")
        self.db.commit()

        print "Done. Now looking for old changes files"
        count = 0
        failure = 0
        cnf = Config()
        for directory in [ "Accepted", "Byhand", "Done", "New", "ProposedUpdates", "OldProposedUpdates" ]:
            checkdir = cnf["Dir::Queue::%s" % (directory) ]
            if os.path.exists(checkdir):
                print "Looking into %s" % (checkdir)
                for filename in os.listdir(checkdir):
                    if not filename.endswith(".changes"):
                        # Only interested in changes files.
                        continue
                    try:
                        count += 1
                        print "Directory %s, file %7d, failures %3d. (%s)" % (directory, count, failure, filename)
                        changes = Changes()
                        changes.changes_file = filename
                        changesfile = os.path.join(checkdir, filename)
                        changes.changes = parse_changes(changesfile, signing_rules=-1)
                        changes.changes["fingerprint"] = check_signature(changesfile)
                        changes.add_known_changes(directory)
                    except InvalidDscError as line:
                        warn("syntax error in .dsc file '%s', line %s." % (f, line))
                        failure += 1
                    except ChangesUnicodeError:
                        warn("found invalid changes file, not properly utf-8 encoded")
                        failure += 1

    except psycopg2.ProgrammingError as msg:
        self.db.rollback()
        raise DBUpdateError("Unable to apply knownchanges update 18, rollback issued. Error message : %s" % (str(msg)))
Пример #3
0
def do_update(self):
    print "Adding known_changes table"

    try:
        c = self.db.cursor()
        c.execute("""
                    CREATE TABLE known_changes (
                    id SERIAL PRIMARY KEY,
                    changesname TEXT NOT NULL,
                    seen TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
                    source TEXT NOT NULL,
                    binaries TEXT NOT NULL,
                    architecture TEXT NOT NULL,
                    version TEXT NOT NULL,
                    distribution TEXT NOT NULL,
                    urgency TEXT NOT NULL,
                    maintainer TEXT NOT NULL,
                    fingerprint TEXT NOT NULL,
                    changedby TEXT NOT NULL,
                    date TEXT NOT NULL,
                    UNIQUE (changesname)
            )
        """)
        c.execute("CREATE INDEX changesname_ind ON known_changes(changesname)")
        c.execute("CREATE INDEX changestimestamp_ind ON known_changes(seen)")
        c.execute("CREATE INDEX changessource_ind ON known_changes(source)")
        c.execute(
            "CREATE INDEX changesdistribution_ind ON known_changes(distribution)"
        )
        c.execute("CREATE INDEX changesurgency_ind ON known_changes(urgency)")

        c.execute("GRANT ALL ON known_changes TO ftpmaster;")
        c.execute("GRANT SELECT ON known_changes TO public;")

        c.execute("UPDATE config SET value = '18' WHERE name = 'db_revision'")
        self.db.commit()

        print "Done. Now looking for old changes files"
        count = 0
        failure = 0
        cnf = Config()
        for directory in [
                "Accepted", "Byhand", "Done", "New", "ProposedUpdates",
                "OldProposedUpdates"
        ]:
            checkdir = cnf["Dir::Queue::%s" % (directory)]
            if os.path.exists(checkdir):
                print "Looking into %s" % (checkdir)
                for filename in os.listdir(checkdir):
                    if not filename.endswith(".changes"):
                        # Only interested in changes files.
                        continue
                    try:
                        count += 1
                        print "Directory %s, file %7d, failures %3d. (%s)" % (
                            directory, count, failure, filename)
                        changes = Changes()
                        changes.changes_file = filename
                        changesfile = os.path.join(checkdir, filename)
                        changes.changes = parse_changes(changesfile,
                                                        signing_rules=-1)
                        changes.changes["fingerprint"] = check_signature(
                            changesfile)
                        changes.add_known_changes(directory)
                    except InvalidDscError as line:
                        warn("syntax error in .dsc file '%s', line %s." %
                             (f, line))
                        failure += 1
                    except ChangesUnicodeError:
                        warn(
                            "found invalid changes file, not properly utf-8 encoded"
                        )
                        failure += 1

    except psycopg2.ProgrammingError as msg:
        self.db.rollback()
        raise DBUpdateError(
            "Unable to apply knownchanges update 18, rollback issued. Error message : %s"
            % (str(msg)))