diff options
author | Allan McRae <allan@archlinux.org> | 2010-11-16 15:57:39 +1000 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2010-12-12 20:29:37 -0600 |
commit | adb10c3ab244cc00eb863d5b036fa7bdd76f8152 (patch) | |
tree | 8b1d8a3fb6753a491b7d1802c69ec190479659b5 | |
parent | f0051a7678d138ffc88a4c9c6d9add8966abe4f9 (diff) | |
download | pacman-adb10c3ab244cc00eb863d5b036fa7bdd76f8152.tar.xz |
Prototype disk space checking functionality
Very basic prototyping for adding functionality to check free disk
space before performing package installs.
Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r-- | lib/libalpm/Makefile.am | 1 | ||||
-rw-r--r-- | lib/libalpm/diskspace.c | 28 | ||||
-rw-r--r-- | lib/libalpm/diskspace.h | 29 | ||||
-rw-r--r-- | lib/libalpm/sync.c | 8 |
4 files changed, 66 insertions, 0 deletions
diff --git a/lib/libalpm/Makefile.am b/lib/libalpm/Makefile.am index bac30389..da663cb5 100644 --- a/lib/libalpm/Makefile.am +++ b/lib/libalpm/Makefile.am @@ -32,6 +32,7 @@ libalpm_la_SOURCES = \ db.h db.c \ delta.h delta.c \ deps.h deps.c \ + diskspace.h diskspace.c \ dload.h dload.c \ error.c \ graph.h \ diff --git a/lib/libalpm/diskspace.c b/lib/libalpm/diskspace.c new file mode 100644 index 00000000..31a2760d --- /dev/null +++ b/lib/libalpm/diskspace.c @@ -0,0 +1,28 @@ +/* + * diskspace.c + * + * Copyright (c) 2010 Pacman Development Team <pacman-dev@archlinux.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +/* libalpm */ +#include "diskspace.h" + +int _alpm_check_diskspace(pmtrans_t *trans, pmdb_t *db) +{ + return 0; +} + +/* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libalpm/diskspace.h b/lib/libalpm/diskspace.h new file mode 100644 index 00000000..69e39d8e --- /dev/null +++ b/lib/libalpm/diskspace.h @@ -0,0 +1,29 @@ +/* + * diskspace.h + * + * Copyright (c) 2010 Pacman Development Team <pacman-dev@archlinux.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef _ALPM_DISKSPACE_H +#define _ALPM_DISKSPACE_H + +#include "alpm.h" + +int _alpm_check_diskspace(pmtrans_t *trans, pmdb_t *db); + +#endif /* _ALPM_DISKSPACE_H */ + +/* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c index 2f307750..23476b8d 100644 --- a/lib/libalpm/sync.c +++ b/lib/libalpm/sync.c @@ -48,6 +48,7 @@ #include "dload.h" #include "delta.h" #include "remove.h" +#include "diskspace.h" /** Check for new version of pkg in sync repos * (only the first occurrence is considered in sync) @@ -996,6 +997,13 @@ int _alpm_sync_commit(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t **data) EVENT(trans, PM_TRANS_EVT_FILECONFLICTS_DONE, NULL, NULL); } + /* check available disk space */ + _alpm_log(PM_LOG_DEBUG, "checking available disk space\n"); + if(_alpm_check_diskspace(trans, handle->db_local) == -1) { + _alpm_log(PM_LOG_ERROR, _("not enough free disk space\n")); + goto error; + } + /* remove conflicting and to-be-replaced packages */ if(replaces) { _alpm_log(PM_LOG_DEBUG, "removing conflicting and to-be-replaced packages\n"); |