[packages/lftp] - rel 3; round to block size per file when doing du

arekm arekm at pld-linux.org
Mon Nov 17 11:56:26 CET 2014


commit 5749762bd9070afa6a7b14aeb10606e2c12b82de
Author: Arkadiusz Miśkiewicz <arekm at maven.pl>
Date:   Mon Nov 17 11:56:20 2014 +0100

    - rel 3; round to block size per file when doing du

 lftp-du-block.patch | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 lftp.spec           |  4 ++-
 2 files changed, 100 insertions(+), 1 deletion(-)
---
diff --git a/lftp.spec b/lftp.spec
index 7cf3f46..6ec1420 100644
--- a/lftp.spec
+++ b/lftp.spec
@@ -24,7 +24,7 @@ Summary(pt_BR.UTF-8):	Sofisticado programa de transferência de arquivos (client
 Summary(zh_CN.UTF-8):	lftp 客户端程序
 Name:		lftp
 Version:	4.6.0
-Release:	2
+Release:	3
 License:	GPL v3+
 Group:		Applications/Networking
 Source0:	http://lftp.yar.ru/ftp/%{name}-%{version}.tar.xz
@@ -41,6 +41,7 @@ Patch2:		aliases.patch
 Patch3:		%{name}-pl.po-update.patch
 Patch4:		lftp-4.3.8-gets.patch
 Patch5:		%{name}-am.patch
+Patch6:		lftp-du-block.patch
 URL:		http://lftp.yar.ru/
 BuildRequires:	autoconf >= 2.60
 BuildRequires:	automake
@@ -99,6 +100,7 @@ o arquivo FEATURES para uma lista mais detalhada.
 %patch3 -p1
 %patch4 -p1
 %patch5 -p1
+%patch6 -p1
 
 %{__rm} po/stamp-po
 
diff --git a/lftp-du-block.patch b/lftp-du-block.patch
new file mode 100644
index 0000000..b137093
--- /dev/null
+++ b/lftp-du-block.patch
@@ -0,0 +1,97 @@
+commit beabec486f7ad680c70292384049eb45c5ac081d
+Author: Alexander V. Lukyanov <lavv17f at gmail.com>
+Date:   Fri Nov 14 20:42:32 2014 +0300
+
+    du: round file sizes up to block size
+
+diff --git a/src/FindJobDu.cc b/src/FindJobDu.cc
+index 822baed..e2e19df 100644
+--- a/src/FindJobDu.cc
++++ b/src/FindJobDu.cc
+@@ -107,6 +107,13 @@ const char *FinderJob_Du::MakeFileName(const char *n)
+    return size_stack.count()>0 ? dir_file(size_stack.last()->dir,n) : n;
+ }
+ 
++off_t FinderJob_Du::BlockCeil(off_t size) const
++{
++   size+=output_block_size-1;
++   size-=size%output_block_size;
++   return size;
++}
++
+ FinderJob::prf_res FinderJob_Du::ProcessFile(const char *d,const FileInfo *fi)
+ {
+    if(buf->Broken())
+@@ -127,7 +134,7 @@ FinderJob::prf_res FinderJob_Du::ProcessFile(const char *d,const FileInfo *fi)
+       return PRF_OK; /* can't count this one */
+ 
+    /* add this file to the current dir */
+-   long long add = fi->size;
++   long long add = BlockCeil(fi->size);
+    if (file_count)
+       add = 1;
+    if(size_stack.count()>0)
+@@ -137,7 +144,7 @@ FinderJob::prf_res FinderJob_Du::ProcessFile(const char *d,const FileInfo *fi)
+    if(all_files || stack_ptr == -1) {
+       /* this is <, where Pop() is <=, since the file counts in depth */
+       if(max_print_depth == -1 || stack_ptr < max_print_depth)
+-	 print_size(fi->size, MakeFileName(fi->name));
++	 print_size(BlockCeil(fi->size), MakeFileName(fi->name));
+    }
+ 
+    return PRF_OK;
+@@ -172,7 +179,7 @@ void FinderJob_Du::print_size (long long n_blocks, const char *string)
+    /* We get blocks in bytes, since we don't know the remote system's
+     * block size. */
+    buf->Format("%s\t%s\n",
+-	 human_readable (n_blocks, buffer, human_opts, 1, output_block_size),
++	 human_readable (n_blocks, buffer, human_opts, 1, human_opts?1:output_block_size),
+ 	 string);
+ }
+ 
+diff --git a/src/FindJobDu.h b/src/FindJobDu.h
+index 9dfbc33..820d79f 100644
+--- a/src/FindJobDu.h
++++ b/src/FindJobDu.h
+@@ -51,6 +51,7 @@ class FinderJob_Du : public FinderJob
+    Ref<ArgV> args;
+ 
+    void print_size (long long n_blocks, const char *string);
++   off_t BlockCeil(off_t size) const;
+ 
+    // prepends last directory name
+    const char *MakeFileName(const char *n);
+diff --git a/src/commands.cc b/src/commands.cc
+index b14b71b..20e908f 100644
+--- a/src/commands.cc
++++ b/src/commands.cc
+@@ -2983,6 +2983,7 @@ CMD(du)
+ 	 break;
+       case 'b':
+ 	 blocksize = 1;
++	 human_opts = 0;
+ 	 break;
+       case 'c':
+ 	 print_totals=true;
+@@ -3000,18 +3001,18 @@ CMD(du)
+ 	 file_count=true;
+ 	 break;
+       case 'h':
+-	 blocksize=1;
+-	 human_opts|=human_autoscale|human_SI|human_base_1024;
++	 human_opts |= human_autoscale|human_SI|human_base_1024;
+ 	 break;
+       case 'H':
+-	 blocksize=1;
+ 	 human_opts |= human_autoscale|human_SI;
+ 	 break;
+       case 'k': /* the default; here for completeness */
+ 	 blocksize = 1024;
++	 human_opts = 0;
+ 	 break;
+       case 'm':
+ 	 blocksize = 1024*1024;
++	 human_opts = 0;
+ 	 break;
+       case 's':
+ 	 summarize_only = true;
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/lftp.git/commitdiff/5749762bd9070afa6a7b14aeb10606e2c12b82de



More information about the pld-cvs-commit mailing list