Merge branch 'vd/scalar-generalize-diagnose'
The "diagnose" feature to create a zip archive for diagnostic material has been lifted from "scalar" and made into a feature of "git bugreport". * vd/scalar-generalize-diagnose: scalar: update technical doc roadmap scalar-diagnose: use 'git diagnose --mode=all' builtin/bugreport.c: create '--diagnose' option builtin/diagnose.c: add '--mode' option builtin/diagnose.c: create 'git diagnose' builtin diagnose.c: add option to configure archive contents scalar-diagnose: move functionality to common location scalar-diagnose: move 'get_disk_info()' to 'compat/' scalar-diagnose: add directory to archiver more gently scalar-diagnose: avoid 32-bit overflow of size_t scalar-diagnose: use "$GIT_UNZIP" in test
This commit is contained in:
56
compat/disk.h
Normal file
56
compat/disk.h
Normal file
@ -0,0 +1,56 @@
|
||||
#ifndef COMPAT_DISK_H
|
||||
#define COMPAT_DISK_H
|
||||
|
||||
#include "git-compat-util.h"
|
||||
|
||||
static int get_disk_info(struct strbuf *out)
|
||||
{
|
||||
struct strbuf buf = STRBUF_INIT;
|
||||
int res = 0;
|
||||
|
||||
#ifdef GIT_WINDOWS_NATIVE
|
||||
char volume_name[MAX_PATH], fs_name[MAX_PATH];
|
||||
DWORD serial_number, component_length, flags;
|
||||
ULARGE_INTEGER avail2caller, total, avail;
|
||||
|
||||
strbuf_realpath(&buf, ".", 1);
|
||||
if (!GetDiskFreeSpaceExA(buf.buf, &avail2caller, &total, &avail)) {
|
||||
error(_("could not determine free disk size for '%s'"),
|
||||
buf.buf);
|
||||
res = -1;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
strbuf_setlen(&buf, offset_1st_component(buf.buf));
|
||||
if (!GetVolumeInformationA(buf.buf, volume_name, sizeof(volume_name),
|
||||
&serial_number, &component_length, &flags,
|
||||
fs_name, sizeof(fs_name))) {
|
||||
error(_("could not get info for '%s'"), buf.buf);
|
||||
res = -1;
|
||||
goto cleanup;
|
||||
}
|
||||
strbuf_addf(out, "Available space on '%s': ", buf.buf);
|
||||
strbuf_humanise_bytes(out, avail2caller.QuadPart);
|
||||
strbuf_addch(out, '\n');
|
||||
#else
|
||||
struct statvfs stat;
|
||||
|
||||
strbuf_realpath(&buf, ".", 1);
|
||||
if (statvfs(buf.buf, &stat) < 0) {
|
||||
error_errno(_("could not determine free disk size for '%s'"),
|
||||
buf.buf);
|
||||
res = -1;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
strbuf_addf(out, "Available space on '%s': ", buf.buf);
|
||||
strbuf_humanise_bytes(out, (off_t)stat.f_bsize * (off_t)stat.f_bavail);
|
||||
strbuf_addf(out, " (mount flags 0x%lx)\n", stat.f_flag);
|
||||
#endif
|
||||
|
||||
cleanup:
|
||||
strbuf_release(&buf);
|
||||
return res;
|
||||
}
|
||||
|
||||
#endif /* COMPAT_DISK_H */
|
Reference in New Issue
Block a user