summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAllan McRae <allan@archlinux.org>2010-11-16 16:54:30 +1000
committerDan McGee <dan@archlinux.org>2010-12-12 20:30:05 -0600
commite22aa23c8f5adb0fd4b7ccbee480a4906ede0346 (patch)
treef55fd3e631e186c914b358930e3e30b29cdb69cb
parent3f0d98c124db1547d6595762bd2d125b4350b861 (diff)
Add configuration option to control disk space checking
Disk space checking is likely to be an unnecessary bottleneck to people with reasonable partition sizes so add a configuration option to allow it to be disabled/enabled as wanted. Signed-off-by: Allan McRae <allan@archlinux.org> Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r--doc/pacman.conf.5.txt4
-rw-r--r--etc/pacman.conf.in1
-rw-r--r--lib/libalpm/alpm.h3
-rw-r--r--lib/libalpm/handle.c14
-rw-r--r--lib/libalpm/handle.h1
-rw-r--r--lib/libalpm/sync.c10
-rw-r--r--src/pacman/pacman.c2
7 files changed, 31 insertions, 4 deletions
diff --git a/doc/pacman.conf.5.txt b/doc/pacman.conf.5.txt
index ecc5c748..ae4d7484 100644
--- a/doc/pacman.conf.5.txt
+++ b/doc/pacman.conf.5.txt
@@ -162,6 +162,10 @@ Options
than the percent of each individual download target. The progress
bar is still based solely on the current file download.
+*CheckSpace*::
+ Performs an approximate check for adequate available disk space before
+ installing packages.
+
Repository Sections
-------------------
Each repository section defines a section name and at least one location where
diff --git a/etc/pacman.conf.in b/etc/pacman.conf.in
index 32071196..d1d596cb 100644
--- a/etc/pacman.conf.in
+++ b/etc/pacman.conf.in
@@ -33,6 +33,7 @@ Architecture = auto
#ShowSize
#UseDelta
#TotalDownload
+#CheckSpace
#
# REPOSITORIES
diff --git a/lib/libalpm/alpm.h b/lib/libalpm/alpm.h
index 4d0ca501..2879f560 100644
--- a/lib/libalpm/alpm.h
+++ b/lib/libalpm/alpm.h
@@ -155,6 +155,9 @@ void alpm_option_set_arch(const char *arch);
int alpm_option_get_usedelta();
void alpm_option_set_usedelta(int usedelta);
+int alpm_option_get_checkspace();
+void alpm_option_set_checkspace(int checkspace);
+
pmdb_t *alpm_option_get_localdb();
alpm_list_t *alpm_option_get_syncdbs();
diff --git a/lib/libalpm/handle.c b/lib/libalpm/handle.c
index aa34cf45..ffa5dd67 100644
--- a/lib/libalpm/handle.c
+++ b/lib/libalpm/handle.c
@@ -232,6 +232,15 @@ int SYMEXPORT alpm_option_get_usedelta()
return handle->usedelta;
}
+int SYMEXPORT alpm_option_get_checkspace()
+{
+ if (handle == NULL) {
+ pm_errno = PM_ERR_HANDLE_NULL;
+ return -1;
+ }
+ return handle->checkspace;
+}
+
pmdb_t SYMEXPORT *alpm_option_get_localdb()
{
if (handle == NULL) {
@@ -550,4 +559,9 @@ void SYMEXPORT alpm_option_set_usedelta(int usedelta)
handle->usedelta = usedelta;
}
+void SYMEXPORT alpm_option_set_checkspace(int checkspace)
+{
+ handle->checkspace = checkspace;
+}
+
/* vim: set ts=2 sw=2 noet: */
diff --git a/lib/libalpm/handle.h b/lib/libalpm/handle.h
index 1834994e..46414b95 100644
--- a/lib/libalpm/handle.h
+++ b/lib/libalpm/handle.h
@@ -60,6 +60,7 @@ typedef struct _pmhandle_t {
int usesyslog; /* Use syslog instead of logfile? */ /* TODO move to frontend */
char *arch; /* Architecture of packages we should allow */
int usedelta; /* Download deltas if possible */
+ int checkspace; /* Check disk space before installing */
} pmhandle_t;
/* global handle variable */
diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c
index 23476b8d..14f14621 100644
--- a/lib/libalpm/sync.c
+++ b/lib/libalpm/sync.c
@@ -998,10 +998,12 @@ int _alpm_sync_commit(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t **data)
}
/* 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;
+ if(handle->checkspace) {
+ _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 */
diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c
index 4239667e..700b74db 100644
--- a/src/pacman/pacman.c
+++ b/src/pacman/pacman.c
@@ -956,6 +956,8 @@ static int _parse_options(char *key, char *value)
} else if(strcmp(key, "TotalDownload") == 0) {
config->totaldownload = 1;
pm_printf(PM_LOG_DEBUG, "config: totaldownload\n");
+ } else if(strcmp(key, "CheckSpace") == 0) {
+ alpm_option_set_checkspace(1);
} else {
pm_printf(PM_LOG_ERROR, _("directive '%s' without value not recognized\n"), key);
return(1);