Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Arch Linux
repod
Commits
dfdc743e
Unverified
Commit
dfdc743e
authored
Oct 09, 2019
by
Maxim Baz
Browse files
Implement basic db-move
parent
2db01263
Changes
1
Hide whitespace changes
Inline
Side-by-side
dbscripts/db-move
0 → 100755
View file @
dfdc743e
#!/usr/bin/python
import
asyncio
import
json
from
argparse
import
ArgumentParser
from
fcntl
import
LOCK_EX
,
flock
from
pathlib
import
Path
from
sys
import
argv
,
exit
async
def
main
(
repo_from
,
repo_to
,
pkgbases
)
->
int
:
metadir
=
(
Path
(
argv
[
0
]).
parent
/
"meta"
).
resolve
(
strict
=
True
)
lockfile
=
(
metadir
/
"dbscripts.lock"
).
open
(
mode
=
"w"
)
flock
(
lockfile
,
LOCK_EX
)
# check that user has access to these repos
if
not
(
metadir
/
repo_from
).
is_dir
():
raise
RuntimeError
(
f
"Source repo '
{
repo_from
}
' is not allowed"
)
if
not
(
metadir
/
repo_to
).
is_dir
():
raise
RuntimeError
(
f
"Target repo '
{
repo_to
}
' is not allowed"
)
if
repo_from
==
repo_to
:
raise
RuntimeError
(
"repo_from and repo_to cannot be the same"
)
# load existing repo metadata
meta
=
{
repo
:
{
p
.
name
[:
-
5
]:
json
.
load
((
metadir
/
repo
/
p
).
open
())
for
p
in
(
metadir
/
repo
).
glob
(
"*.json"
)
}
for
repo
in
[
repo_from
,
repo_to
]
}
# validate that the move is possible
for
pkgbase
in
pkgbases
:
if
pkgbase
not
in
meta
[
repo_from
]:
raise
RuntimeError
(
f
"pkgbase '
{
pkgbase
}
' is not present in the source repo '
{
repo_from
}
'"
)
if
pkgbase
in
meta
[
repo_to
]:
raise
RuntimeError
(
f
"pkgbase '
{
pkgbase
}
' is already present in the destination repo '
{
repo_to
}
'"
)
# move package info within `meta` objects and update json files
Path
(
metadir
/
repo_to
).
mkdir
(
exist_ok
=
True
)
for
pkgbase
in
pkgbases
:
meta
[
repo_to
][
pkgbase
]
=
meta
[
repo_from
][
pkgbase
]
del
meta
[
repo_from
][
pkgbase
]
(
metadir
/
repo_from
/
f
"
{
pkgbase
}
.json"
).
rename
(
metadir
/
repo_to
/
f
"
{
pkgbase
}
.json"
)
# rebuild DB file using `meta` object
# TODO
return
0
if
__name__
==
"__main__"
:
parser
=
ArgumentParser
(
description
=
"Move pkgbase(s) between repositories"
)
parser
.
add_argument
(
"repo_from"
,
help
=
"repo to move pkgbase(s) from"
)
parser
.
add_argument
(
"repo_to"
,
help
=
"repo to move pkgbase(s) to"
)
parser
.
add_argument
(
"pkgbase"
,
help
=
"pkgbase(s) to move"
,
nargs
=
"+"
)
args
=
parser
.
parse_args
()
exit
(
asyncio
.
run
(
main
(
args
.
repo_from
,
args
.
repo_to
,
args
.
pkgbase
)))
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment