extensionDownloader: Check schemadir existence and type
When checking for an extension schemadir, an error will be thrown if `query_info()` is used and the directory is missing. Catch the case of a missing directory, but throw an error if the path exists as a non-directory type. Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2727>
This commit is contained in:
parent
95c0a88fe7
commit
3cc3a79b7a
@ -115,23 +115,32 @@ async function extractExtensionArchive(bytes, dir) {
|
||||
await unzip.wait_check_async(null);
|
||||
|
||||
const schemasPath = dir.get_child('schemas');
|
||||
|
||||
try {
|
||||
const info = await schemasPath.query_info_async(
|
||||
Gio.FILE_ATTRIBUTE_STANDARD_TYPE,
|
||||
Gio.FileQueryInfoFlags.NONE,
|
||||
GLib.PRIORITY_DEFAULT,
|
||||
null);
|
||||
|
||||
if (info.get_file_type() === Gio.FileType.DIRECTORY) {
|
||||
if (info.get_file_type() !== Gio.FileType.DIRECTORY)
|
||||
throw new Error('schemas is not a directory');
|
||||
} catch (e) {
|
||||
if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND))
|
||||
console.warn(`Error while looking for schema for extension ${dir.get_basename()}: ${e.message}`);
|
||||
return;
|
||||
}
|
||||
|
||||
const compileSchema = Gio.Subprocess.new(
|
||||
['glib-compile-schemas', '--strict', schemasPath.get_path()],
|
||||
Gio.SubprocessFlags.NONE);
|
||||
|
||||
try {
|
||||
await compileSchema.wait_check_async(null);
|
||||
} catch (e) {
|
||||
log(`Error while compiling schema for extension ${dir.get_basename()}: (${e.message})`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} uuid - extension uuid
|
||||
|
Loading…
Reference in New Issue
Block a user