aurblup: make provider updates more robust

Message ID 20190121193318.14816-1-lfleischer@archlinux.org
State Superseded, archived
Headers show
Series aurblup: make provider updates more robust | expand

Commit Message

Lukas Fleischer Jan. 21, 2019, 7:33 p.m. UTC
Prevent from corner cases, such as failing unique key constraints when a
provided package changes from lower case to upper case.

Signed-off-by: Lukas Fleischer <lfleischer@archlinux.org>
---
 aurweb/scripts/aurblup.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

Comments

Eli Schwartz Jan. 21, 2019, 8:16 p.m. UTC | #1
On 1/21/19 2:33 PM, Lukas Fleischer wrote:
> Prevent from corner cases, such as failing unique key constraints when a
> provided package changes from lower case to upper case.

What about:

"Reverse the order of deletion and addition so that deletion comes
first. This prevents corner cases such as failing unique key constraints
when a provided package changes from lower case to upper case and the
old name is not yet gone."

I'm a big lover of manuscript-style commit messages :D and this makes it
clearer *how* the patch intends to solve the problem.

> Signed-off-by: Lukas Fleischer <lfleischer@archlinux.org>
> ---
>  aurweb/scripts/aurblup.py | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/aurweb/scripts/aurblup.py b/aurweb/scripts/aurblup.py
> index 1433173..a7d43f1 100755
> --- a/aurweb/scripts/aurblup.py
> +++ b/aurweb/scripts/aurblup.py
> @@ -39,13 +39,13 @@ def main():
>      cur = conn.execute("SELECT Name, Provides FROM OfficialProviders")
>      oldproviders = set(cur.fetchall())
>  
> +    for pkg, provides in oldproviders.difference(providers):
> +        conn.execute("DELETE FROM OfficialProviders "
> +                     "WHERE Name = ? AND Provides = ?", [pkg, provides])
>      for pkg, provides in providers.difference(oldproviders):
>          repo = repomap[(pkg, provides)]
>          conn.execute("INSERT INTO OfficialProviders (Name, Repo, Provides) "
>                       "VALUES (?, ?, ?)", [pkg, repo, provides])
> -    for pkg, provides in oldproviders.difference(providers):
> -        conn.execute("DELETE FROM OfficialProviders "
> -                     "WHERE Name = ? AND Provides = ?", [pkg, provides])
>  
>      conn.commit()
>      conn.close()
>

Patch

diff --git a/aurweb/scripts/aurblup.py b/aurweb/scripts/aurblup.py
index 1433173..a7d43f1 100755
--- a/aurweb/scripts/aurblup.py
+++ b/aurweb/scripts/aurblup.py
@@ -39,13 +39,13 @@  def main():
     cur = conn.execute("SELECT Name, Provides FROM OfficialProviders")
     oldproviders = set(cur.fetchall())
 
+    for pkg, provides in oldproviders.difference(providers):
+        conn.execute("DELETE FROM OfficialProviders "
+                     "WHERE Name = ? AND Provides = ?", [pkg, provides])
     for pkg, provides in providers.difference(oldproviders):
         repo = repomap[(pkg, provides)]
         conn.execute("INSERT INTO OfficialProviders (Name, Repo, Provides) "
                      "VALUES (?, ?, ?)", [pkg, repo, provides])
-    for pkg, provides in oldproviders.difference(providers):
-        conn.execute("DELETE FROM OfficialProviders "
-                     "WHERE Name = ? AND Provides = ?", [pkg, provides])
 
     conn.commit()
     conn.close()