• Bug#1072205: prevent re-using package versions for NMUs (2/3)

    From Johannes Schauer Marin Rodrigues@21:1/5 to holger@layer-acht.org on Wed Apr 2 15:40:01 2025
    [continued from previous message]

    + values(?,?,?,?)""",
    + newhashes[algo],
    )
    - del lastversions[key]
    - # handle architectures that were present in the last timestamp but not
    - # anymore in this one
    - for suite in lastarches.keys() & thisarches.keys():
    - for arch in lastarches[suite] - thisarches[suite]:
    - for compid, comp in enumerate(possible_areas):
    - if onlycomp is not None and onlycomp != comp:
    - continue
    - key = suite + " " + comp + " " + arch
    - if key not in lastversions:
    - continue
    - for pkg in lastversions[key]:
    - rows = []
    - for ver in lastversions[key][pkg]:
    - rows.append((ver, lastversions[key][pkg][ver], lasttimestamp))
    - conn.executemany(
    - """insert into ranges(suite, comp, arch, pkg, ver, begin, end)
    - values(?, ?, ?, ?, ?, ?, ?)""",
    - [
    - (
    - suite2id[suite],
    - compid,
    - arch2id[arch],
    - pkg2id[pkg],
    - ver2id[v],
    - timestamp2id[b],
    - timestamp2id[e],
    - )
    - for v, b, e in rows
    - ],
    - )
    - del lastversions[key]
    +
    + # for pkg in thisversions[key]:
    + # if key in lastversions:
    + # last_ver = lastversions[key].get(pkg)
    + # else:
    + # last_ver = None
    + # if timestamp == timestamps[-1]:
    + # rows = []
    + # # special handling for last timestamp
    + # if last_ver is None:
    + # for ver in thisversions[key][pkg]:
    + # rows.append((ver, timestamp, timestamp))
    + # else:
    + # if last_ver.keys() == thisversions[key][pkg]:
    + # for ver in last_ver:
    + # rows.append((ver, last_ver[ver], timestamp))
    + # else:
    + # # there is a difference
    + # for ver in sorted(
    + # last_ver.keys() | thisversions[key][pkg] + # ):
    + # if (
    + # ver in last_ver
    + # and ver in thisversions[key][pkg]
    + # ):
    + # # version is in both, the last and current timestamp
    + # rows.append((ver, last_ver[ver], timestamp))
    + # elif (
    + # ver in last_ver
    + # and ver not in thisversions[key][pkg] + # ):
    + # # version is in last but not current timestamp
    + # rows.append((ver, last_ver[ver], lasttimestamp))
    + # elif (
    + # ver not in last_ver
    + # and ver in thisversions[key][pkg]
    + # ):
    + # # version is new in this timestamp
    + # rows.append((ver, timestamp, timestamp))
    + # else:
    + # raise Exception("logic error")
    + # conn.executemany(
    + # """insert into ranges(suite, comp, arch, pkg, ver, begin, end)
    + # values(?, ?, ?, ?, ?, ?, ?)""",
    + # [
    + # (
    + # suite2id[suite],
    + # compid,
    + # arch2id[arch],
    + # pkg2id[pkg],
    + # ver2id[v],
    + # timestamp2id[b],
    + # timestamp2id[e],
    + # )
    + # for v, b, e in rows
    + # ],
    + # )
    + # if last_ver is not None:
    + # del lastversions[key][pkg]
    + # if not lastversions[key]:
    + # del lastversions[key]
    + # continue
    + # if last_ver is None:
    + # # package didn't exist before, start new entry
    + # if key not in lastversions:
    + # lastversions[key] = dict()
    + # lastversions[key][pkg] = {
    + # v: timestamp for v in thisversions[key][pkg]
    + # }
    + # continue
    + # if last_ver.keys() == thisversions[key][pkg]:
    + # # same versions in this Packages file as in the last + # continue
    + # # there is a difference -- add a new line to the output for
    + # # each version that was removed and add a new entry in the
    + # # dict for each version that was added
    + # rows = []
    + # for ver in last_ver.keys() - thisversions[key][pkg]:
    + # # for all removed versions, add a new line
    + # rows.append((ver, last_ver[ver], lasttimestamp))
    + # # and delete the old entry
    + # del lastversions[key][pkg][ver]
    + # if not lastversions[key][pkg]:
    + # del lastversions[key][pkg]
    + # if not lastversions[key]:
    + # del lastversions[key]
    + # conn.executemany(
    + # """insert into ranges(suite, comp, arch, pkg, ver, begin, end)
    + # values(?, ?, ?, ?, ?, ?, ?)""",
    + # [
    + # (
    + # suite2id[suite],
    + # compid,
    + # arch2id[arch],
    + # pkg2id[pkg],
    + # ver2id[v],
    + # timestamp2id[b],
    + # timestamp2id[e],
    + # )
    + # for v, b, e in rows
    + # ],
    + # )
    + # for ver in thisversions[key][pkg] - last_ver.keys():
    + # # for all added versions, add a new entry
    + # if key not in lastversions:
    + # lastversions[key] = dict()
    + # if pkg not in lastversions[key]:
    + # lastversions[key][pkg] = dict()
    + # lastversions[key][pkg][ver] = timestamp
    +
    + ## go through all packages that were handled last timestamp but
    + ## were missing this timestamp
    + # if key in lastversions:
    + # for pkg in lastversions[key].keys() - thisversions[key].keys():
    + # rows = []
    + # for ver in lastversions[key][pkg]:
    + # rows.append(
    + # (ver, lastversions[key][pkg][ver], lasttimestamp)
    + # )
    + # conn.executemany(
    + # """insert into ranges(suite, comp, arch, pkg, ver, begin, end)
    + # values(?, ?, ?, ?, ?, ?, ?)""",
    + # [
    + # (
    + # suite2id[suite],
    + # compid,
    + # arch2id[arch],
    + # pkg2id[pkg],
    + # ver2id[v],
    + # timestamp2id[b],
    + # timestamp2id[e],
    + # )
    + # for v, b, e in rows
    + # ],
    + # )
    + # del lastversions[key][pkg]
    + # if not lastversions[key]:
    + # del lastversions[key]
    + ## add entries for all suites that were present in the last timestamp
    + ## but not anymore in this timestamp
    + # for suite in lastarches.keys() - thisarches.keys():
    + # for arch in lastarches[suite]:
    + # for compid, comp in enumerate(possible_areas):
    + # if onlycomp is not None and onlycomp != comp:
    + # continue
    + # key = suite + " " + comp + " " + arch
    + # if key not in lastversions:
    + # continue
    + # for pkg in lastversions[key]:
    + # rows = []
    + # for ver in lastversions[key][pkg]:
    + # rows.append((ver, lastversions[key][pkg][ver], lasttimestamp))
    + # conn.executemany(
    + # """insert into ranges(suite, comp, arch, pkg, ver, begin, end)
    + # values(?, ?, ?, ?, ?, ?, ?)""",
    + # [
    + # (
    + # suite2id[suite],
    + # compid,
    + # arch2id[arch],
    + # pkg2id[pkg],
    + # ver2id[v],
    + # timestamp2id[b],
    + # timestamp2id[e],
    + # )
    + # for v, b, e in rows
    + # ],
    + # )
    + # del lastversions[key]
    + ## handle architectures that were present in the last timestamp but not
    + ## anymore in this one
    + # for suite in lastarches.keys() & thisarches.keys():
    + # for arch in lastarches[suite] - thisarches[suite]:
    + # for compid, comp in enumerate(possible_areas):
    + # if onlycomp is not None and onlycomp != comp:
    + # continue
    + # key = suite + " " + comp + " " + arch
    + # if key not in lastversions:
    + # continue
    + # for pkg in lastversions[key]:
    + # rows = []
    + # for ver in lastversions[key][pkg]:
    + # rows.append((ver, lastversions[key][pkg][ver], lasttimestamp))
    + # conn.executemany(
    + # """insert into ranges(suite, comp, arch, pkg, ver, begin, end)
    + # values(?, ?, ?, ?, ?, ?, ?)""",
    + # [
    + # (
    + # suite2id[suite],
    + # compid,
    + # arch2id[arch],
    + # pkg2id[pkg],
    + # ver2id[v],
    + # timestamp2id[b],
    + # timestamp2id[e],
    + # )
    + # for v, b, e in rows
    + # ],
    + # )
    + # del lastversions[key]
    lastarches = thisarches
    + last_packages_hashes = this_packages_hashes
    lasttimestamp = timestamp
    total_hours = (time.time() - starttime) / (60 * 60)
    ts_per_h = (i + 1) / total_hours
    remaining = (len(timestamps) - i - 1) / ts_per_h
    - print("per hour: %f remaining: %f hours" % (ts_per_h, remaining))
    + print("per hour all: %f remaining all: %f hours" % (ts_per_h, remaining))
    + ts_per_h_current = (60 * 60 )/(time.time() - ts_start_time)
    + remaining_current = (len(timestamps) - i - 1) / ts_per_h_current
    + print("per hour curr: %f remaining curr: %f hours" % (ts_per_h_current, remaining_current))

    print("committing changes to the database...")


    --==============@90845724143846751=Content-Type: image/png
    MIME-Version: 1.0
    Content-Transfer-Encoding: base64
    Content-Disposition: attachment; filename="graph.png"; maxlinelen="78"

    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 kkua3R0AABqg3Xaoyn1g+I53vCN89atfbXY3arZ06dLkvIvxKsQnn3xysnfBmDFjwmmnnZZcnbhf v37h9ttvT85PWHo8b9685P+WP6c0DQBoLaVTqrTiqVUAACim3AeGRxxxRNi0aVOyx108n2H8df6E E05I9jxsBcOGDQsLFy581fQFCxZ0+7iraQAAAADQSLkPDI899tj08J0rrrgiuWryOeec09xOAQAA AECbyn1g+NBDD4VHH300uehHPKz3ySefDI8//nizuwUAAAAAbSn3geGZZ54Zpk+fnlwpePz48eGV V14J06ZNa3a3AAAAAKAt5T4wfN/73pf8i+JVg/fZZ58m9wgAAAAA2lfuA8PLL788/OhHPwovv/xy Ehbeeuutze4SAAAAALSt3AeGzz77bBg9enRyVeSrr7662d0BAAAAgLaW+8DwmWeeCf369QurV68O f/zjH5vdHQAAAABoa7kPDCdMmBB22WWXcMUVV4Sjjz662d0BAAAAgLaW+8DwnnvuSa6UfO2114az zz47jBkzptldAgAAAIC2lfvA8DWveU2YNm1auPfee8N5553X7O4AAAAAQFvLdWB45513hre97W1h +fLl4aCDDgp//etfm90lAAAAAGhruQ4M416F0f77758+dh5DAAAAAGicXAeGkyZNCvPnzw9HHnlk 2LBhQ3jggQea3SUAgKo899xz29wCAEDe5TowjJYsWZJc6KRPnz7JhU9c9AQAaCWrV6/e5hYAAPIu 94Fh9Mc//jG88sorzmEIALScrVu3bnMLAAB5l/vA8JxzzglXXXVVcv8DH/hAk3sDAFCdzZs3b3ML AAB5l/vA8Ic//GFYsWJFePnll8MTTzwRTj311GZ3CQCgYhs3btzmFgAA8i73geGzzz4bRo8eHU4/ /fRw9dVXN7s7AAAAANDWch8YPvPMM6Ffv37JicLjuQwBAAAAgMbJfWA4YcKEsMsuu4QrrrgiHH30 0c3uDgAAAAC0tdwHhkOGDAnr168Ps2bNCv379292dwAAAACgreU+MDzrrLPCmjVrkisLvvnNbw5f /vKXm90lAAAAAGhbuQ8M99tvv3DNNdck9y+99NIm9wYAAAAA2lvuA8PHH388LFy4MLn/1FNPhV/8 4hdh69atzmcIALSEOG4pvwUAgLzLfWC49957hz/84Q/J/be+9a1h+fLlyX2BIQDQCgSGAAC0mtwH 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 yJrAEAAAAICma2bw7miBbQkMgYaIu3NPnTo1uT9lyhS/0AAAtJDNmzdvc0vXzCugHQkMgYaIu3Pf fffd6X2BIQBA67CnTeXMK6AdCQyBhigfMBk8AQAAQOsQGAIN18wrXQHkXTyFw8qVK5vdDdqEKzwC AFkQGAIN18wrXQHkXTxtw/r165vdDdqEKzwCAFkQGAIN18wrXQHkndM2kCXnUgMAsiAwhCaYPn16 uOqqq8K5554bLrzwwmZ3p+FcMQ6gdqXTOjz44INh3333bXJvAADoKJ4S5OKLLw59+/Ztmz38BYbQ BFdeeWXyBTDeFiEwtJcDQO1Kp3V44YUXnOIBACCH4ilBHnjggeRWYAjUrLTHnT3vAOhJ+WkdnOIB ACB/2vGUIALDNuYqeQAAAABUS2DYxlwlL7/sYQgAAADklcCwjbXjLrHtwrIBAAAA8kpgCAAAAACk BIYAANBEzz33XHL7u9/9LjkHtVPJAADNJjAEAIAmWr16dXK7YcOG5BzUAkMAoNkEhlAm/qo/derU 5P6UKVMM2OmWi9YAWSjtXUZxbd26Nb3v/MbkTVw/jznmmDB58mRjY2gj8bvvzJkzvbc7sXLlSnv8 B4EhbCP+qn/33Xen94u+gaB7vtQBWSjtXQaQRzEw/PnPf56Me4yNoX3E77tLlizx3u7E+vXr5QFB YJgbW7ZsCbNnzw4zZswIDz/8cBgwYEByWMq4ceOSD+k+ffqEuXPnhv79+ze7q22tPAASBgHQG8r3 LgPIK2NjaC+l97T3dufMF4FhbqxduzYMHjw4DBo0KJ02f/78MGLEiDB27NgkLLzxxhvDhAkTmthL AAAAANqdwDAnBg4cmPybPn16Ou3BBx8M48ePT+4PHTo0zJkzp1ndAwAAAKAgBIYtIh6yHA9LLrnv vvvCmjVrtnnOokWLtnm8bt269Lbj3zp7XmftdGyj/Lk9tduKequ+0uFn8bbd5mFJ+bxspzpfeeWV 9H471dXOKt0WQm/obB0s3650tp6W/710v7Pntfq63k797zi9p3p6Wgdq7Ucrzsd6FLn2Rigfr0bN nK+lZdvdNrCZijC2p/3kdZuZ5WditerJAzp+/rcDgWGOxUOUly9fHoYMGRKWLVuWPC6JexyWiyvy qFGjtpl22WWXJbePPfZYcsXfyy+/vNOTdpaeV1LeTulv8ZyKcXr5c0vT2klv1VcKf+Ntu83DkvJ5 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 bv0uH+90Nq23P8tK/Sv1oafP+d5Wydi+Yz/Lt9ntOC5oh++NWWrm/OjqPVLPOtjI910zv+vUs5xK /7dfv36Z96tZBIYtaujQods8jivyqFGjtpn261//Otx6663hqaeeSlbez3/+88n0+Ly+ffuGqVOn Jo/f9ra3Jc+LzznggAOSv5fai8+bOXNmmDx5chg5cmTS5m233Zb8vylTpiTTOnvteqZV+txa/2+s Kc6L9evXh6uuuiqpoeSjH/1o+MEPfhD22Wef9G/19LGrafFQ8wceeCAcc8wx6d+qaS/2LS6X4cOH hzvuuCP8wz/8Q6d9jMvrrrvuSpdfV9M6W96bNm2qaxnG1/nmN78ZVq9eHU455ZRt1qt65mNWfeyu 313Nn+iTn/xkmD9/fjIgjPd7WidrWe9LNXa1XCtdT3tjWm+9TiXT4nz79Kc/nW7vyt/z559/frji iivSZdrZtEb0sXx6I9fdVlhenU3PWx8b1Z/DDjss2bbssssuyXu24/K/6KKLwmWXXZacqzgeWXD5 5Zdv876Of4/T9txzz3D44YeHJ554IlmPovJtRXxebP/cc89NxgmdrePVfi50Vl9363JX269K5m13 275q+lP6jCzVU+l7sLPXifM0Hunxlre8JWk36moMURp3RR//+MfDj3/84/Dss89u87yutj177bVX 8kNwnz59tvlsqWXdq2Q+9jQvOq4Tpefvvffe6fpXybrSXZu11tfdtN7ctnesJ4vtR1frbtb9Lo3l P/ShD4Xvfe976focxc/Rp59+OhxyyCHhkUceCRs2bEjWy/jv0EMPDa997WuT5zXqe0BP83vfffdN xkBxOxf1xtiwkufG9+23v/3tMGbMmC63fR3fm+Xb7FItWfUnD9PKv2/G9aWIY5+Oyz/Oj46fC731 2p19LpTWweOPP77XPrMrmVY+7uls3JT1/CmfFl+vlJvEPlS63kblnwvtQmCYY0uXLk0ueLJixYpw 8sknh9GjR4exY8dW/P/jF5RLLrlkm2lx5Y7iBqp8sBYDkM6UP6+rNltNqaZYd8cN9YknntjlvMhS /LDobCNTqfLlcuGFF6bLtaPOlld3y7DjelGPRq0rWfaxMz31+4Ybbkj+dfVBkYXydbQzvbWetpo4 z77xjW+8arnE6fHDvvz93tm03uhfI9dd8iseFVCu4/KP2/H4RbyrbUr8e/xX+r/lzyvfVpQ/L+ps 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 4t4A8TOinpqzbK+WIK6SmmsZS/VUdz1tZhHuVbMdr3Y81V0fs2qvliCukprjulPr+KyruutpM4tw r5K6DzjggJrGUt3VXUubWQZ75XV3tedareOprgKarNuLah2f9bS3Xi1jqZ4OGa62zazCvUrrrmU8 1V0fs26v1vFZdzXXOpbqrp+1tNlVe/X++FoEAsMcyjrc62zPqO5+LRs1alRm/YwfWLG9ntpsRLBX bd1xYNHT3g/V9DOr9qoJ9yqtOX45iodNVarSuittM+twr9plHc/Dk2U/45UCe2qzEcFed3u5dvxF OB4+FbcX1dTc3Ze42FaW7UWVDPSqqbk0YInn14p7OmXVz0razDrcq6buuIfXxz72seTiC91d3bDS PsaBVZbtVTrQq6bmGLjHc4lVsgdJpf286KKLKmoz63CvmrrjHk2VXtmvkn7GL0dxO5TVPKwmiKum 7niYYPzy2tPVOyvtZzwUKav2qgniqqk5vt4Pf/jDbvtXbd2VjM+qaS+qZIxW7Xa82vFUT33Mqr1q grhqav63f/u3ivewr6Sfcb2uZXyWRbhXTd0xhKtlfNbd8q52fJZVsNdd3R33XIvzoNrxVHcBTS3j syzCvWpqjnvrRdWOzyo5ZLia8VkW4V41dcd5V+14qrs+1jI+yyLcq6bmuC7WMj7rrp+1jM+6aq/e H1+LQGCYM40I97ragyseLlPrYYXV9jPLtioZ6DWi7ixrrqa9asK9vC/rWtqrZPCY97obEex1VXdp r8daDs2o9ktcT19oGhHuVVtzPIlz1nX31GYjwr1q647rfZY1Z9lepeFetTVXMhht5jpeabiX9fs6 67obEezVUndPbTZzWVca7uV9WdfSXiVjtHb67Ko03Gu3ZV1puJf3uhsR7PVUdy2HkVYbxvV06Gwj wr1qa653fNZZP+sZn9Ua7lVbdz3jqc5qzrK9SsO9amuud3zWyHW8NMat9MfXIhIY5kwjgo/u9lKM 52Cp5bDCLPvZiJobUXfW/Szisi5q3Y0YMHdXd2kv12oPzci6n40I97KuOQ919zTYa0Tdza65ksFj Oy7rSuS97qyDvUbVbVkXp+4i1qzuxm/Paj1/b09113IYadb9bES4l3XNeai73vFZKy7resdnrbqs 6ZrAMCdKV+2JuxbHqwrWG3xUc+WsSn8tq+SqYdX0M+uaG1F31jU3ou5WWNZFrbunmmsZMFd7Vbye fhGu5mqAlfYz67qzrrmodRexZnVnV7ftWXGWdSvUXcSa1d2727Nqg49K6457cFWy51qlNVfTz6zr zrrmotZdxJpbpW4EhrlQftWeeBnzN7/5zXUFH1lfOaurNusJaLKuuRF1Z11zI+puhWVd1LqrqTmq ZMBcbd09/SJcy9UAe+pn1nVnXXNR6y5izerOrm7bs+Is61aou4g1q7v3t2fVBB/V1B3b6mnPtWpq rrSfWdeddc1FrbuINbdK3fyNwDAHOrtqTz2HZ2Z95ayu2qz1qmGNqLkRdWddcyPqboVlXdS6q6m5 kgFzI+qutuZK+pl13XlY1u1QdxFrVnd2ddueFWdZt0LdRaxZ3b2/Pas0+GhE3dXUXGk/s6672cu6 XeouYs2tUjd/IzDMgc6u2lPPGzCLK2dV2mat/cy65u76GNVSd9Y1d9Vmuy/rrtps97qt48VZ1l21 mae6i1hzd22q2/as1jbbfVl31Wae6i5izd21qW7bs1rbbPdl3VWbeaq7iDV312ae6uZvBIY5EK/e

    [continued in next message]

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)