示例#1
0
def do_update(self):
    print(__doc__)
    try:
        cnf = Config()

        c = self.db.cursor()

        archive_root = cnf["Dir::Root"]
        c.execute("ALTER TABLE archive ADD COLUMN path TEXT NOT NULL DEFAULT %s", (archive_root,))
        c.execute("ALTER TABLE archive ALTER COLUMN path DROP DEFAULT")

        c.execute("ALTER TABLE archive ADD COLUMN mode CHAR(4) NOT NULL DEFAULT '0644' CHECK (mode SIMILAR TO '[0-7]{4}')")
        c.execute("ALTER TABLE archive ADD COLUMN tainted BOOLEAN NOT NULL DEFAULT 'f'")
        c.execute("ALTER TABLE archive ADD COLUMN use_morgue BOOLEAN NOT NULL DEFAULT 't'")

        c.execute("SELECT id FROM archive")
        (archive_id,) = c.fetchone()

        if c.fetchone() is not None:
            raise DBUpdateError("Cannot automatically upgrade form installation with multiple archives.")

        c.execute("ALTER TABLE suite ADD COLUMN archive_id INT REFERENCES archive(id) NOT NULL DEFAULT %s", (archive_id,))
        c.execute("ALTER TABLE suite ALTER COLUMN archive_id DROP DEFAULT")

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

    except psycopg2.ProgrammingError as msg:
        self.db.rollback()
        raise DBUpdateError('Unable to apply sick update 73, rollback issued. Error message : %s' % (str(msg)))
示例#2
0
def do_update(self):
    """
    Fix up constraints for pg 9.0
    """
    print __doc__
    try:
        c = self.db.cursor()

        c.execute(
            "ALTER TABLE policy_queue DROP constraint policy_queue_perms_check"
        )
        c.execute(
            "ALTER TABLE policy_queue DROP constraint policy_queue_change_perms_check"
        )
        c.execute(
            "ALTER TABLE policy_queue ADD CONSTRAINT policy_queue_perms_check CHECK (perms SIMILAR TO '[0-7][0-7][0-7][0-7]')"
        )
        c.execute(
            "ALTER TABLE policy_queue ADD CONSTRAINT policy_queue_change_perms_check CHECK (change_perms SIMILAR TO '[0-7][0-7][0-7][0-7]')"
        )

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

    except psycopg2.ProgrammingError as msg:
        self.db.rollback()
        raise DBUpdateError(
            'Unable to apply update 43, rollback issued. Error message : %s' %
            (str(msg)))
示例#3
0
def do_update(self):
    print(__doc__)
    try:
        cnf = Config()

        c = self.db.cursor()

        c.execute(
            "UPDATE policy_queue set queue_name='stable-new' where queue_name='proposedupdates'"
        )
        c.execute(
            "UPDATE policy_queue set queue_name='oldstable-new' where queue_name='oldproposedupdates'"
        )
        c.execute(
            "UPDATE suite set suite_name='stable-new' where    suite_name='proposedupdates'"
        )
        c.execute(
            "UPDATE suite set suite_name='oldstable-new' where suite_name='oldproposedupdates'"
        )

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

    except psycopg2.ProgrammingError as msg:
        self.db.rollback()
        raise DBUpdateError(
            'Unable to apply sick update 79, rollback issued. Error message: {0}'
            .format(msg))
示例#4
0
def do_update(self):
    """
    Implement changelogs table
    """
    print __doc__
    try:
        c = self.db.cursor()
        c.execute('ALTER TABLE changes ADD COLUMN changelog_id integer')
        c.execute(
            'CREATE TABLE changelogs_text (id serial PRIMARY KEY NOT NULL, changelog text)'
        )
        c.execute("GRANT SELECT ON changelogs_text TO public")
        c.execute("GRANT ALL ON changelogs_text TO ftpmaster")
        c.execute(
            'CREATE VIEW changelogs AS SELECT cl.id, source, CAST(version AS debversion), architecture, changelog \
                   FROM changes c JOIN changelogs_text cl ON cl.id = c.changelog_id'
        )
        c.execute("GRANT SELECT ON changelogs TO public")
        c.execute("GRANT ALL ON changelogs TO ftpmaster")
        c.execute("UPDATE config SET value = '33' WHERE name = 'db_revision'")
        self.db.commit()

    except psycopg2.ProgrammingError as msg:
        self.db.rollback()
        raise DBUpdateError(
            'Unable to apply build_queue update 33, rollback issued. Error message : %s'
            % (str(msg)))
示例#5
0
def do_update(self):
    """
    Update default settings for suites
    """
    print(__doc__)
    try:
        c = self.db.cursor()

        c.execute("""
          ALTER TABLE section
            ADD COLUMN description TEXT NOT NULL DEFAULT 'Missing shortdesc',
            ADD COLUMN longdesc TEXT NOT NULL DEFAULT 'Missing longdesc'
        """)

        for section in sections:
            c.execute("UPDATE section SET description=%s, longdesc=%s WHERE section=%s", (section, sections[section]["desc"], sections[section]["longdesc"]))
            c.execute("UPDATE section SET description=%s, longdesc=%s WHERE section=CONCAT('contrib/', %s)", (section, sections[section]["desc"], sections[section]["longdesc"]))
            c.execute("UPDATE section SET description=%s, longdesc=%s WHERE section=CONCAT('non-free/', %s)", (section, sections[section]["desc"], sections[section]["longdesc"]))

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

    except psycopg2.ProgrammingError as msg:
        self.db.rollback()
        raise DBUpdateError('Unable to apply sick update 124, rollback issued. Error message : %s' % (str(msg)))
示例#6
0
def do_update(self):
    print(__doc__)
    try:
        cnf = Config()

        c = self.db.cursor()

        c.execute(
            "GRANT SELECT ON files_archive_map, policy_queue_byhand_file, policy_queue_upload, policy_queue_upload_binaries_map TO PUBLIC"
        )
        c.execute(
            "GRANT ALL ON files_archive_map, policy_queue_byhand_file, policy_queue_upload, policy_queue_upload_binaries_map TO ftpmaster"
        )

        c.execute("ALTER DEFAULT PRIVILEGES GRANT SELECT ON TABLES TO PUBLIC")
        c.execute("ALTER DEFAULT PRIVILEGES GRANT ALL ON TABLES TO ftpmaster")
        c.execute(
            "ALTER DEFAULT PRIVILEGES GRANT SELECT ON SEQUENCES TO PUBLIC")
        c.execute(
            "ALTER DEFAULT PRIVILEGES GRANT ALL ON SEQUENCES TO ftpmaster")
        c.execute(
            "ALTER DEFAULT PRIVILEGES GRANT ALL ON FUNCTIONS TO ftpmaster")

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

    except psycopg2.ProgrammingError as msg:
        self.db.rollback()
        raise DBUpdateError(
            'Unable to apply sick update 78, rollback issued. Error message: {0}'
            .format(msg))
示例#7
0
def do_update(self):

    print "adding a bin_contents table to hold lists of files contained in .debs and .udebs"

    try:
        c = self.db.cursor()
        c.execute("""CREATE TABLE bin_contents (
        file text,
        binary_id integer,
        UNIQUE(file,binary_id))""" )

        c.execute("""ALTER TABLE ONLY bin_contents
        ADD CONSTRAINT bin_contents_bin_fkey
        FOREIGN KEY (binary_id) REFERENCES binaries(id)
        ON DELETE CASCADE;""")

        c.execute("""CREATE INDEX ind_bin_contents_binary ON bin_contents(binary_id);""" )

        c.execute("GRANT ALL ON bin_contents TO ftpmaster;")
        c.execute("GRANT SELECT ON bin_contents TO public;")
        c.execute("UPDATE config SET value = '17' WHERE name = 'db_revision'")

        self.db.commit()

    except psycopg2.ProgrammingError as msg:
        self.db.rollback()
        raise DBUpdateError("Unable to apply process-new update 17, rollback issued. Error message : %s" % (str(msg)))
示例#8
0
def do_update(self):
    """
    Make external overrides specific for (suite, component)
    """
    print __doc__
    try:
        c = self.db.cursor()

        c.execute("DELETE FROM external_overrides")
        print "NOTE: Please reimport the external overrides."

        c.execute("""
        ALTER TABLE external_overrides
            DROP CONSTRAINT external_overrides_pkey,
            ADD COLUMN suite INTEGER NOT NULL REFERENCES suite(id),
            ADD COLUMN component INTEGER NOT NULL REFERENCES component(id),
            ADD PRIMARY KEY (suite, component, package, key)
        """)

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

    except psycopg2.ProgrammingError as msg:
        self.db.rollback()
        raise DBUpdateError('Unable to apply sick update 60, rollback issued. Error message : %s' % (str(msg)))
示例#9
0
def do_update(self):
    """
    Add column to store compression type of indices
    """
    print(__doc__)
    try:
        c = self.db.cursor()

        c.execute("""
          ALTER TABLE suite
            ADD COLUMN indices_compression TEXT[] DEFAULT ARRAY['gzip', 'bzip2'],
            ADD COLUMN i18n_compression TEXT[] DEFAULT ARRAY['bzip2']
        """)

        c.execute("""
          ALTER TABLE suite
            ALTER COLUMN indices_compression DROP DEFAULT,
            ALTER COLUMN i18n_compression DROP DEFAULT
        """)

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

    except psycopg2.ProgrammingError as msg:
        self.db.rollback()
        raise DBUpdateError('Unable to apply sick update 101, rollback issued. Error message : %s' % (str(msg)))
示例#10
0
def do_update(self):
    """
    Fix table for source contents.
    """
    print __doc__
    try:
        c = self.db.cursor()

        c.execute("""
            CREATE INDEX ON src_contents (source_id)""")
        c.execute("""
            ALTER TABLE src_contents ADD COLUMN created TIMESTAMP WITH TIME ZONE
                NOT NULL DEFAULT now()""")
        c.execute("""
            ALTER TABLE src_contents ADD COLUMN modified TIMESTAMP WITH TIME ZONE
                NOT NULL DEFAULT now()""")
        c.execute("""
            CREATE TRIGGER modified_src_contents BEFORE UPDATE ON src_contents
            FOR EACH ROW EXECUTE PROCEDURE tfunc_set_modified()""")

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

    except psycopg2.ProgrammingError as msg:
        self.db.rollback()
        raise DBUpdateError('Unable to apply sick update 51, rollback issued. Error message : %s' % (str(msg)))
示例#11
0
def do_update(self):
    print(__doc__)
    try:
        cnf = Config()

        c = self.db.cursor()

        c.execute("""
            CREATE TABLE component_suite (
                component_id INTEGER NOT NULL REFERENCES component(id) ON DELETE CASCADE,
                suite_id INTEGER NOT NULL REFERENCES suite(id) ON DELETE CASCADE,
                PRIMARY KEY (component_id, suite_id)
            )
            """)
        # Set up default mappings for all components to all suites
        c.execute(
            "INSERT INTO component_suite(component_id, suite_id) SELECT component.id,suite.id from suite, component"
        )

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

    except psycopg2.ProgrammingError as msg:
        self.db.rollback()
        raise DBUpdateError(
            'Unable to apply sick update 100, rollback issued. Error message: {0}'
            .format(msg))
示例#12
0
def do_update(self):
    """
    Add 2 partial indexes to speed up dak rm.
    """
    print __doc__
    try:
        cnf = Config()

        c = self.db.cursor()

        # partial index for Depends
        c.execute("SELECT key_id FROM metadata_keys WHERE key = 'Depends'")
        key = c.fetchone()[0]
        c.execute("""CREATE INDEX binaries_metadata_depends
            ON binaries_metadata (bin_id) WHERE key_id = %d""" % key)

        # partial index for Provides
        c.execute("SELECT key_id FROM metadata_keys WHERE key = 'Provides'")
        key = c.fetchone()[0]
        c.execute("""CREATE INDEX binaries_metadata_provides
            ON binaries_metadata (bin_id) WHERE key_id = %d""" % key)

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

    except psycopg2.ProgrammingError as msg:
        self.db.rollback()
        raise DBUpdateError(
            'Unable to apply sick update 66, rollback issued. Error message : %s'
            % (str(msg)))
示例#13
0
def do_update(self):
    """Add column to store whether to generate by-hash things per suite,
    add table to store when by-hash files stopped being referenced
    """
    print __doc__
    try:
        c = self.db.cursor()

        c.execute("ALTER TABLE suite ADD COLUMN byhash BOOLEAN DEFAULT false")

        c.execute("""
            CREATE TABLE hashfile (
                suite_id INTEGER NOT NULL REFERENCES suite(id) ON DELETE CASCADE,
                path TEXT NOT NULL,
                unreferenced TIMESTAMP,
                PRIMARY KEY (suite_id, path)
            )
             """)

        c.execute("UPDATE config SET value = '116' WHERE name = 'db_revision'")

        self.db.commit()

    except psycopg2.ProgrammingError as msg:
        self.db.rollback()
        raise DBUpdateError('Unable to apply sick update 116, rollback issued. Error message : %s' % (str(msg)))
示例#14
0
def do_update(self):
    print(__doc__)
    try:
        cnf = Config()

        c = self.db.cursor()

        for stmt in statements:
            c.execute(stmt)

        for component in ('main', 'contrib', 'non-free'):
            c.execute(
                "UPDATE component SET ordering = nextval('component_ordering_seq') WHERE name = '{0}'"
                .format(component))
        c.execute(
            "UPDATE component SET ordering = nextval('component_ordering_seq') WHERE ordering IS NULL"
        )
        c.execute(
            """ALTER TABLE component ALTER COLUMN ordering SET NOT NULL""")
        c.execute(
            """ALTER TABLE component ALTER COLUMN ordering SET DEFAULT nextval('component_ordering_seq')"""
        )

        c.execute("UPDATE config SET value = '99' WHERE name = 'db_revision'")

        self.db.commit()

    except psycopg2.ProgrammingError as msg:
        self.db.rollback()
        raise DBUpdateError(
            'Unable to apply sick update 99, rollback issued. Error message: {0}'
            .format(msg))
示例#15
0
def do_update(self):
    """
    Rename squeeze-volatile to squeeze-updates to get more confused users
    """
    print __doc__
    try:
        c = self.db.cursor()
        if gethostname() == 'franck':
            c.execute(
                "UPDATE suite SET suite_name='squeeze-updates', description='Updated packages for Debian x.y', codename='squeeze-updates' WHERE suite_name='squeeze-volatile'"
            )
            c.execute(
                "UPDATE build_queue SET queue_name='buildd-squeeze-updates', path='/srv/incoming.debian.org/dists/squeeze-updates/buildd', releasedescription='buildd squeeze updates incoming' WHERE queue_name='buildd-squeeze-volatile'"
            )
            c.execute(
                "UPDATE policy_queue SET queue_name='squeeze-updates-proposed-updates', path='/srv/ftp-master.debian.org/queue/updates/squeeze-updates-p-u-new' WHERE queue_name='squeeze-volatile-proposed-updates'"
            )
        c.execute("UPDATE config SET value = '40' WHERE name = 'db_revision'")
        self.db.commit()

    except psycopg2.ProgrammingError as msg:
        self.db.rollback()
        raise DBUpdateError(
            'Unable to apply sick update 40, rollback issued. Error message : %s'
            % (str(msg)))
示例#16
0
def do_update(self):
    """
    Fix up permissions
    """
    print __doc__
    try:
        c = self.db.cursor()

        c.execute(
            "GRANT SELECT, UPDATE, INSERT ON binaries_metadata TO ftpmaster")
        c.execute("GRANT SELECT ON binaries_metadata TO public")
        c.execute("GRANT USAGE ON metadata_keys_key_id_seq TO ftpmaster")
        c.execute(
            "GRANT SELECT, UPDATE, INSERT ON source_metadata TO ftpmaster")
        c.execute("GRANT SELECT ON source_metadata TO public")
        c.execute("GRANT SELECT, UPDATE, INSERT ON metadata_keys TO ftpmaster")
        c.execute("GRANT SELECT ON metadata_keys TO public")
        c.execute(
            "GRANT SELECT, UPDATE, INSERT ON extra_src_references TO ftpmaster"
        )
        c.execute("GRANT SELECT ON extra_src_references TO public")
        c.execute("GRANT SELECT, UPDATE, INSERT ON src_contents TO ftpmaster")
        c.execute("GRANT SELECT ON src_contents TO public")
        c.execute("GRANT USAGE ON changelogs_text_id_seq TO ftpmaster")
        c.execute("GRANT SELECT ON changes_pending_files_map TO public")
        c.execute("GRANT SELECT ON config TO public")

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

    except psycopg2.ProgrammingError as msg:
        self.db.rollback()
        raise DBUpdateError(
            'Unable to apply sick update 49, rollback issued. Error message : %s'
            % (str(msg)))
示例#17
0
def do_update(self):
    print "Add constraints to src_uploaders"
    Cnf = get_conf()

    try:
        c = self.db.cursor()
        # Deal with out-of-date src_uploaders entries
        c.execute(
            "DELETE FROM src_uploaders WHERE source NOT IN (SELECT id FROM source)"
        )
        c.execute(
            "DELETE FROM src_uploaders WHERE maintainer NOT IN (SELECT id FROM maintainer)"
        )
        # Add constraints
        c.execute(
            "ALTER TABLE src_uploaders ADD CONSTRAINT src_uploaders_maintainer FOREIGN KEY (maintainer) REFERENCES maintainer(id) ON DELETE CASCADE"
        )
        c.execute(
            "ALTER TABLE src_uploaders ADD CONSTRAINT src_uploaders_source FOREIGN KEY (source) REFERENCES source(id) ON DELETE CASCADE"
        )
        c.execute("UPDATE config SET value = '10' WHERE name = 'db_revision'")
        self.db.commit()

    except psycopg2.ProgrammingError as msg:
        self.db.rollback()
        raise DBUpdateError(
            "Unable to apply suite config updates, rollback issued. Error message : %s"
            % (str(msg)))
示例#18
0
def do_update(self):
    print __doc__
    try:
        cnf = Config()

        c = self.db.cursor()

        c.execute("""
            CREATE OR REPLACE VIEW world."files-1" AS
              SELECT
                files.id AS id,
                component.name || '/' || files.filename AS filename,
                files.size AS size,
                files.md5sum AS md5sum,
                files.sha1sum AS sha1sum,
                files.sha256sum AS sha256sum,
                files.last_used AS last_used,
                files.created AS created,
                files.modified AS modified
              FROM files
              JOIN files_archive_map fam ON files.id = fam.file_id
              JOIN component ON fam.component_id = component.id
              WHERE fam.archive_id = (SELECT id FROM archive WHERE name IN ('backports', 'ftp-master', 'security') ORDER BY id LIMIT 1)
            """)

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

    except psycopg2.ProgrammingError as msg:
        self.db.rollback()
        raise DBUpdateError('Unable to apply sick update 93, rollback issued. Error message: {0}'.format(msg))
示例#19
0
def do_update(self):
    """
    Make lastused in queuefiles/policyqueuefiles default now()
    """
    print(__doc__)
    try:
        cnf = Config()

        c = self.db.cursor()

        c.execute(
            "ALTER TABLE build_queue_files ALTER COLUMN lastused SET DEFAULT now()"
        )
        c.execute(
            "ALTER TABLE build_queue_files ALTER COLUMN lastused SET NOT NULL")
        c.execute(
            "ALTER TABLE build_queue_policy_files ALTER COLUMN lastused SET  DEFAULT now()"
        )
        c.execute(
            "ALTER TABLE build_queue_policy_files ALTER COLUMN lastused SET NOT NULL"
        )

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

    except psycopg2.ProgrammingError as msg:
        self.db.rollback()
        raise DBUpdateError(
            'Unable to apply sick update 71, rollback issued. Error message : %s'
            % (str(msg)))
示例#20
0
def do_update(self):
    """
    Just a view for version checks
    """
    print __doc__
    try:
        c = self.db.cursor()

        c.execute("""
        CREATE OR REPLACE VIEW version_checks AS
        SELECT s.suite_name AS source_suite, v.check as condition, t.suite_name AS target_suite
        FROM suite s
         JOIN version_check v ON (s.id = v.suite)
         JOIN suite t ON (v.reference = t.id)
        ORDER BY source_suite, condition, target_suite;
        """)

        c.execute("GRANT SELECT on version_checks TO PUBLIC;")
        c.execute("UPDATE config SET value = '61' WHERE name = 'db_revision'")
        self.db.commit()

    except psycopg2.ProgrammingError as msg:
        self.db.rollback()
        raise DBUpdateError(
            'Unable to apply sick update 61, rollback issued. Error message : %s'
            % (str(msg)))
示例#21
0
def do_update(self):
    """
    Add column to store list of checksums per suite
    """
    print __doc__
    try:
        c = self.db.cursor()

        c.execute("""
          ALTER TABLE suite
            ADD COLUMN checksums TEXT[] DEFAULT ARRAY['md5sum', 'sha1', 'sha256']
        """)

        c.execute("""
          ALTER TABLE suite
            ALTER COLUMN checksums SET DEFAULT ARRAY['sha256']
        """)

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

    except psycopg2.ProgrammingError as msg:
        self.db.rollback()
        raise DBUpdateError(
            'Unable to apply sick update 114, rollback issued. Error message : %s'
            % (str(msg)))
示例#22
0
def do_update(self):
    print "Adding process-new comments to the DB"

    try:
        c = self.db.cursor()
        c.execute("""CREATE TABLE new_comments (
                      id SERIAL PRIMARY KEY NOT NULL,
                      package TEXT NOT NULL,
                      version TEXT NOT NULL,
                      comment TEXT NOT NULL,
                      author TEXT NOT NULL
                   )""")

        c.execute("GRANT SELECT ON new_comments TO ftptrainee;")
        c.execute("GRANT INSERT ON new_comments TO ftptrainee;")
        c.execute("GRANT UPDATE ON new_comments TO ftptrainee;")
        c.execute("GRANT SELECT ON new_comments TO ftpteam;")
        c.execute("GRANT INSERT ON new_comments TO ftpteam;")
        c.execute("GRANT UPDATE ON new_comments TO ftpteam;")
        c.execute("GRANT ALL ON new_comments TO ftpmaster;")

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

    except psycopg2.ProgrammingError as msg:
        self.db.rollback()
        raise DBUpdateError(
            "Unable to apply process-new comments update, rollback issued. Error message : %s"
            % (str(msg)))
示例#23
0
def do_update(self):
    """
    Add external_overrides
    """
    print __doc__
    try:
        c = self.db.cursor()

        c.execute("""
        CREATE TABLE external_overrides (
            package TEXT NOT NULL,
            key TEXT NOT NULL,
            value TEXT NOT NULL,
            PRIMARY KEY (package, key)
        )""")

        c.execute(
            "GRANT SELECT, UPDATE, INSERT, DELETE ON external_overrides TO ftpmaster"
        )
        c.execute("GRANT SELECT ON external_overrides TO public")

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

    except psycopg2.ProgrammingError as msg:
        self.db.rollback()
        raise DBUpdateError(
            'Unable to apply sick update 59, rollback issued. Error message : %s'
            % (str(msg)))
示例#24
0
def do_update(self):
    """
    Add missing PrimaryMirror field to archive table
    """
    print __doc__
    try:
        cnf = Config()

        c = self.db.cursor()

        c.execute("ALTER TABLE archive ADD COLUMN primary_mirror TEXT")

        c.execute("SELECT id, name FROM archive")

        query = "UPDATE archive SET primary_mirror = %s WHERE id = %s"
        for a_id, a_name in c.fetchall():
            if cnf.has_key('Archive::%s::PrimaryMirror' % a_name):
                primloc = cnf['Archive::%s::PrimaryMirror' % a_name]
                print "Setting archive %s PrimaryMirror to %s" % (a_name,
                                                                  primloc)
                c.execute(query, [primloc, a_id])

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

    except psycopg2.ProgrammingError as msg:
        self.db.rollback()
        raise DBUpdateError(
            'Unable to apply sick update 63, rollback issued. Error message : %s'
            % (str(msg)))
示例#25
0
def do_update(self):
    print "Adding content fields to database"

    try:
        c = self.db.cursor()
        c.execute("""CREATE TABLE content_file_paths (
                     id serial primary key not null,
                     path text unique not null
                   )""")

        c.execute("""CREATE TABLE content_file_names (
                    id serial primary key not null,
                    file text unique not null
                   )""")

        c.execute("""CREATE TABLE content_associations (
                    id serial not null,
                    binary_pkg int4 not null references binaries(id) on delete cascade,
                    filepath int4 not null references content_file_paths(id) on delete cascade,
                    filename int4 not null references content_file_names(id) on delete cascade
                  );""")

        c.execute("""CREATE TABLE pending_content_associations (
                     id serial not null,
                     package text not null,
                     version debversion not null,
                     filepath int4 not null references content_file_paths(id) on delete cascade,
                     filename int4 not null references content_file_names(id) on delete cascade
                   );""")

        c.execute("""CREATE FUNCTION comma_concat(text, text) RETURNS text
                   AS $_$select case
                   WHEN $2 is null or $2 = '' THEN $1
                   WHEN $1 is null or $1 = '' THEN $2
                   ELSE $1 || ',' || $2
                   END$_$
                   LANGUAGE sql""")

        c.execute("""CREATE AGGREGATE comma_separated_list (
                   BASETYPE = text,
                   SFUNC = comma_concat,
                   STYPE = text,
                   INITCOND = ''
                   );""")

        c.execute(
            "CREATE INDEX content_assocaitions_binary ON content_associations(binary_pkg)"
        )

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

    except psycopg2.ProgrammingError as msg:
        self.db.rollback()
        raise DBUpdateError(
            "Unable to appy debversion updates, rollback issued. Error message : %s"
            % (str(msg)))
示例#26
0
def do_update(self):
    """
    Add support for Description-md5
    """
    print __doc__
    try:
        cnf = Config()

        c = self.db.cursor()

        c.execute(
            """CREATE OR REPLACE FUNCTION public.add_missing_description_md5()
  RETURNS VOID
  VOLATILE
  LANGUAGE plpgsql
AS $function$
DECLARE
  description_key_id metadata_keys.key_id%TYPE;
  description_md5_key_id metadata_keys.key_id%TYPE;
  BEGIN
    SELECT key_id INTO STRICT description_key_id FROM metadata_keys WHERE key='Description';
    SELECT key_id INTO description_md5_key_id FROM metadata_keys WHERE key='Description-md5';
    IF NOT FOUND THEN
      INSERT INTO metadata_keys (key) VALUES ('Description-md5') RETURNING key_id INTO description_md5_key_id;
    END IF;

    INSERT INTO binaries_metadata
      (bin_id, key_id, value)
    SELECT
      bm.bin_id AS bin_id,
      description_md5_key_id AS key_id,
      MD5(bm.value || E'\n') AS value
    FROM binaries_metadata AS bm
    WHERE
      bm.key_id = description_key_id
      AND
      NOT EXISTS (SELECT 1 FROM binaries_metadata AS bm2 WHERE bm.bin_id = bm2.bin_id AND bm2.key_id = description_md5_key_id);
END;
$function$""")

        c.execute(
            "ALTER TABLE suite ADD COLUMN include_long_description BOOLEAN NOT NULL DEFAULT 't'"
        )

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

    except psycopg2.ProgrammingError, msg:
        self.db.rollback()
        raise DBUpdateError(
            'Unable to apply sick update 69, rollback issued. Error message : %s'
            % (str(msg)))
示例#27
0
def do_update(self):
    print "Adding a date field to the process-new notes"

    try:
        c = self.db.cursor()
        c.execute("ALTER TABLE new_comments ADD COLUMN notedate TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now()")

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

    except psycopg2.ProgrammingError as msg:
        self.db.rollback()
        raise DBUpdateError("Unable to apply process-new update 12, rollback issued. Error message : %s" % (str(msg)))
示例#28
0
def do_update(self):
    print(__doc__)
    try:
        cnf = Config()

        c = self.db.cursor()
        c.execute("INSERT INTO config (name, value) VALUES('unprivgroup', 'dak-unpriv')")
        c.execute("UPDATE config SET value = '86' WHERE name = 'db_revision'")
        self.db.commit()

    except psycopg2.ProgrammingError as msg:
        self.db.rollback()
        raise DBUpdateError('Unable to apply sick update 86, rollback issued. Error message: {0}'.format(msg))
示例#29
0
def do_update(self):
    print __doc__
    try:
        cnf = Config()

        c = self.db.cursor()

        c.execute("CREATE SCHEMA world")
        c.execute("GRANT USAGE ON SCHEMA world TO PUBLIC")
        c.execute(
            "ALTER DEFAULT PRIVILEGES IN SCHEMA world GRANT SELECT ON TABLES TO PUBLIC"
        )
        c.execute(
            "ALTER DEFAULT PRIVILEGES IN SCHEMA world GRANT ALL ON TABLES TO ftpmaster"
        )
        c.execute(
            "ALTER DEFAULT PRIVILEGES IN SCHEMA world GRANT SELECT ON SEQUENCES TO PUBLIC"
        )
        c.execute(
            "ALTER DEFAULT PRIVILEGES IN SCHEMA world GRANT ALL ON SEQUENCES TO ftpmaster"
        )
        c.execute(
            "ALTER DEFAULT PRIVILEGES IN SCHEMA world GRANT ALL ON FUNCTIONS TO ftpmaster"
        )
        c.execute("""
            CREATE OR REPLACE VIEW world."files-1" AS
              SELECT
                files.id AS id,
                component.name || '/' || files.filename AS filename,
                files.size AS size,
                files.md5sum AS md5sum,
                files.sha1sum AS sha1sum,
                files.sha256sum AS sha256sum,
                files.last_used AS last_used,
                files.created AS created,
                files.modified AS modified
              FROM files
              JOIN files_archive_map fam ON files.id = fam.file_id
              JOIN component ON fam.component_id = component.id
              WHERE fam.archive_id = (SELECT id FROM archive WHERE name IN ('backports', 'ftp-master', 'security'))
            """)

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

    except psycopg2.ProgrammingError as msg:
        self.db.rollback()
        raise DBUpdateError(
            'Unable to apply sick update 79, rollback issued. Error message: {0}'
            .format(msg))
示例#30
0
def do_update(self):
    print(__doc__)
    try:
        cnf = Config()

        c = self.db.cursor()
        c.execute("GRANT SELECT, UPDATE, USAGE ON policy_queue_byhand_file_id_seq TO ftpmaster")
        c.execute("GRANT SELECT ON policy_queue_byhand_file_id_seq TO public")
        c.execute("UPDATE config SET value = '81' WHERE name = 'db_revision'")
        self.db.commit()

    except psycopg2.ProgrammingError as msg:
        self.db.rollback()
        raise DBUpdateError('Unable to apply sick update 81, rollback issued. Error message: {0}'.format(msg))