Import of pkgsrc-2013Q2

This commit is contained in:
2013-09-26 17:14:40 +02:00
commit 785076ae39
74991 changed files with 4380255 additions and 0 deletions

2
sysutils/same/DESCR Normal file
View File

@@ -0,0 +1,2 @@
The `same' utility looks for identical files and links them together
using either hard links or symbolic links, saving disk space.

20
sysutils/same/Makefile Normal file
View File

@@ -0,0 +1,20 @@
# $NetBSD: Makefile,v 1.9 2012/10/23 19:51:22 asau Exp $
DISTNAME= same-1.8
CATEGORIES= sysutils
MASTER_SITES= ftp://ftp.bitwizard.nl/same/
MAINTAINER= pkgsrc-users@NetBSD.org
HOMEPAGE= http://www.bitwizard.nl/
COMMENT= Find identical files and link(2) them to save disk space
PKG_INSTALLATION_TYPES= overwrite pkgviews
AUTO_MKDIRS= yes
USE_BSD_MAKEFILE= yes
post-extract:
cd ${FILESDIR} && cp -f Makefile same.1 same.cat1 ${WRKSRC}
.include "../../devel/zlib/buildlink3.mk"
.include "../../mk/bsd.pkg.mk"

4
sysutils/same/PLIST Normal file
View File

@@ -0,0 +1,4 @@
@comment $NetBSD: PLIST,v 1.2 2006/08/04 22:46:27 rillig Exp $
bin/same
man/cat1/same.0
man/man1/same.1

6
sysutils/same/distinfo Normal file
View File

@@ -0,0 +1,6 @@
$NetBSD: distinfo,v 1.4 2006/08/04 22:59:02 rillig Exp $
SHA1 (same-1.8.tar.gz) = 39d95e70c09703b5c7525a6ea896c097f744d288
RMD160 (same-1.8.tar.gz) = 987e6dc1c99258f00ed831af3fa3f034ebe08134
Size (same-1.8.tar.gz) = 9398 bytes
SHA1 (patch-ac) = 872eb12f82f5875b5980a4bf43c5af18b473fbca

View File

@@ -0,0 +1,6 @@
# $NetBSD: Makefile,v 1.2 2006/08/04 22:46:27 rillig Exp $
PROG= same
LDADD= -lz
.include <bsd.prog.mk>

View File

@@ -0,0 +1,98 @@
.\" $NetBSD: same.1,v 1.2 2006/08/04 22:46:27 rillig Exp $
.Dd July 14, 2004
.Dt SAME 1
.Sh NAME
.Nm same
.Nd link identical files to save disk space
.Sh SYNOPSIS
.Nm
.Fl HVcdhnstuvz
.Sh DESCRIPTION
.Nm
takes a list of files (e.g. the output of find . -type f) on stdin.
Each of the files is compared against each of the others.
Whenever two files are found that match exactly, the two files are
linked (soft or hard) together.
.Ss Goal
The goal of this program is to conserve disk space when you have
several different trees of large projects on your disk.
By creating hardlinks or softlinks between the files that are the same,
you can save lots of disk space.
For example, two different versions of the Linux kernel only differ in a
small number of files.
By running this program you only need to store the contents of those
files once.
This is especially useful if you have different versions of complete
trees lying around.
.Ss Implementation
The filesize of every file is used as an indication of wether two
files can be the same. Whenever the filesizes match, the hashes of
these two files are compared. Whenever these match, the file
contents are compared. For every matching pair one of the two
files is replaced by a hard link to the other file.
With the -s option a softlink is used.
.Pp
To allow you to do this incrementally, the "rm" is done on the file
with the least links. This allows you to "merge" a new tree with
several trees that have already been processed. The new tree has
link count 1, while the old tree has a higher link count for those
files that are likely candidates for linkage.
.Pp
The current implementation keeps the "first" incantation of a file,
and replaces further occurrances of the same file. This is
significant when using softlinks.
.Ss Options
.Bl -tag -width xxxxxx
.It Fl H Ar n , Fl -hashstart Ar n
Start at hash value
.Ar n
instead of 0.
.It Fl V , Fl -version
Print the version of the program and exit.
.It Fl c Ar file , Fl -cache Ar file
Keep a cache between runs in file
.Ar file .
.It Fl d , Fl -debug
Output some debug messages.
.It Fl h , Fl -help
Output this page and exit successfully.
.It Fl n , Fl -dryrun
Only simulate.
.It Fl s , Fl -softlinks
Create soft links instead of hard links.
.It Fl u , Fl -user
Don't relink files owned by another user.
.It Fl v , Fl -verbose
Output verbose messages.
.It Fl z , Fl -nullfiles
Link empty files, too.
By default, only non-empty files are linked.
.El
.Sh EXIT STATUS
Zero on success, non-zero on failure.
.Sh EXAMPLES
.Bd -literal
find . -type f -print | same
.Ed
.Sh SEE ALSO
.Xr find 1
.Sh AUTHORS
.An "Roger E. Wolff" Aq R.E.Wolff@BitWizard.nl ,
.An "Geert Uytterhoeven" Aq geert@linux-m68k.org ,
.An "Roland Illig" Aq roland.illig@gmx.de .
.Sh CAVEATS
.Bl -bullet
.It
If your editor does not move the original aside before writing a
new copy, you will change the file in ALL incarnations when
editing a file.
Patch works just fine: it moves the original aside before creating a new
copy.
I'm confident that I could learn Emacs to do it this way too.
I'm too lazy to figure it out, so if you happen to know an easy way how
to do this, please Email me at
.Aq R.E.Wolff@BitWizard.nl .
.It
There is a 1024 (BUFSIZE) character limit to pathnames when using
symlinks.
.El

View File

@@ -0,0 +1,99 @@
SAME(1) NetBSD General Commands Manual SAME(1)
NNAAMMEE
ssaammee -- link identical files to save disk space
SSYYNNOOPPSSIISS
ssaammee [--HHVVccddhhnnssttuuvvzz]
DDEESSCCRRIIPPTTIIOONN
ssaammee takes a list of files (e.g. the output of find . -type f) on stdin.
Each of the files is compared against each of the others. Whenever two
files are found that match exactly, the two files are linked (soft or
hard) together.
GGooaall
The goal of this program is to conserve disk space when you have several
different trees of large projects on your disk. By creating hardlinks or
softlinks between the files that are the same, you can save lots of disk
space. For example, two different versions of the Linux kernel only dif-
fer in a small number of files. By running this program you only need to
store the contents of those files once. This is especially useful if you
have different versions of complete trees lying around.
IImmpplleemmeennttaattiioonn
The filesize of every file is used as an indication of wether two files
can be the same. Whenever the filesizes match, the hashes of these two
files are compared. Whenever these match, the file contents are compared.
For every matching pair one of the two files is replaced by a hard link
to the other file. With the -s option a softlink is used.
To allow you to do this incrementally, the "rm" is done on the file with
the least links. This allows you to "merge" a new tree with several trees
that have already been processed. The new tree has link count 1, while
the old tree has a higher link count for those files that are likely can-
didates for linkage.
The current implementation keeps the "first" incantation of a file, and
replaces further occurrances of the same file. This is significant when
using softlinks.
OOppttiioonnss
--HH _n, ----hhaasshhssttaarrtt _n
Start at hash value _n instead of 0.
--VV, ----vveerrssiioonn
Print the version of the program and exit.
--cc _f_i_l_e, ----ccaacchhee _f_i_l_e
Keep a cache between runs in file _f_i_l_e.
--dd, ----ddeebbuugg
Output some debug messages.
--hh, ----hheellpp
Output this page and exit successfully.
--nn, ----ddrryyrruunn
Only simulate.
--ss, ----ssooffttlliinnkkss
Create soft links instead of hard links.
--uu, ----uusseerr
Don't relink files owned by another user.
--vv, ----vveerrbboossee
Output verbose messages.
--zz, ----nnuullllffiilleess
Link empty files, too. By default, only non-empty files are
linked.
EEXXIITT SSTTAATTUUSS
Zero on success, non-zero on failure.
EEXXAAMMPPLLEESS
find . -type f -print | same
SSEEEE AALLSSOO
find(1)
AAUUTTHHOORRSS
Roger E. Wolff <R.E.Wolff@BitWizard.nl>,
Geert Uytterhoeven <geert@linux-m68k.org>,
Roland Illig <roland.illig@gmx.de>.
CCAAVVEEAATTSS
·· If your editor does not move the original aside before writing a new
copy, you will change the file in ALL incarnations when editing a
file. Patch works just fine: it moves the original aside before cre-
ating a new copy. I'm confident that I could learn Emacs to do it
this way too. I'm too lazy to figure it out, so if you happen to
know an easy way how to do this, please Email me at
<R.E.Wolff@BitWizard.nl>.
·· There is a 1024 (BUFSIZE) character limit to pathnames when using
symlinks.
NetBSD 4.0 July 14, 2004 NetBSD 4.0

View File

@@ -0,0 +1,151 @@
$NetBSD: patch-ac,v 1.2 2006/08/04 22:59:02 rillig Exp $
--- same.c.orig 2004-07-16 19:30:01.000000000 +0200
+++ same.c 2006-08-05 00:57:39.680842400 +0200
@@ -106,10 +106,9 @@
* - There is a 1024 (BUFSIZE) character limit to pathnames when using
* symlinks.
*
- * - The same source is not exactly 32kbytes long. However this comment
- * seems to fix that.
* */
+#define _FILE_OFFSET_BITS 64
#include <assert.h>
#include <stdio.h>
@@ -123,16 +122,8 @@
#include <sys/times.h>
#include <zlib.h>
#include <limits.h>
-
-#define __USE_LARGEFILE64
#include <sys/stat.h>
-#if 1
-/* Why the *&^#$ doesn't sys/stat define this??? */
-extern int lstat64 (__const char *__restrict __file,
- struct stat64 *__restrict __buf) __THROW;
-#endif
-
#ifdef __linux__
#include <asm/page.h>
#else /* !__linux__ */
@@ -157,6 +148,11 @@ extern int lstat64 (__const char *__rest
#define true 1
#define false 0
+#if defined(__GNUC__)
+# define attribute_unused __attribute__((__unused__))
+#else
+# define attribute_unused /**/
+#endif
static volatile int stop;
static volatile int doing_input;
@@ -184,7 +180,7 @@ static const char *o_cache;
struct name_entry {
struct name_entry *next;
- char name[0];
+ char name[1];
};
#define F_CRC_VALID (1 << 0)
@@ -196,7 +192,7 @@ struct inode_entry {
struct name_entry *names;
int flags; /* See F_* definitions above */
/* The two fields below may have been read from the cache */
- loff_t size;
+ off_t size;
unsigned int crc; /* valid if flags & F_CRC_VALID only */
/* The four fields below are valid if flags & F_STAT_VALID only */
dev_t device;
@@ -288,7 +284,7 @@ static void read_list(void);
static const char *get_fname(void);
static struct inode_entry *get_entry(void);
static int __get_stat(struct inode_entry *entry);
-static unsigned int calc_hash(const struct stat64 *sb);
+static unsigned int calc_hash(const struct stat *sb);
static int __get_crc(struct inode_entry *entry);
static int cmp(const struct inode_entry *entry1,
const struct inode_entry *entry2);
@@ -379,7 +375,7 @@ static void dump_inode_entry(const struc
printf("%sentry %p size %lu crc %08x device %lx inode %lx nlink %d uid "
"%lx\n",
- indent, entry, (unsigned long)entry->size, entry->crc,
+ indent, (void *)entry, (unsigned long)entry->size, entry->crc,
(unsigned long)entry->device, (unsigned long)entry->inode,
entry->nlink, (unsigned long)entry->uid);
for (names = entry->names; names; names = names->next)
@@ -429,7 +425,7 @@ static void load_cache(void)
gzFile *in;
unsigned long line = 0;
char *s;
- loff_t size;
+ off_t size;
unsigned int crc;
const char *name;
unsigned int hash = 0;
@@ -659,7 +655,7 @@ static struct name_entry *alloc_name_ent
return entry;
}
-static void delete_name_entry(struct name_entry *entry __attribute__((__unused__)))
+static void delete_name_entry(struct name_entry *entry attribute_unused)
{
/*
* We don't free names allocated from the pool
@@ -1168,7 +1164,7 @@ static struct inode_entry *get_entry(voi
{
const char *buf;
struct inode_entry *entry;
- struct stat64 sb;
+ struct stat sb;
unsigned int hash;
do {
@@ -1176,7 +1172,7 @@ static struct inode_entry *get_entry(voi
if (buf == NULL)
return NULL;
stat_stat++;
- if (lstat64(buf, &sb) < 0) {
+ if (lstat(buf, &sb) < 0) {
fprintf(stderr, "stat %s: %s\n", buf, strerror(errno));
exit(1);
}
@@ -1204,13 +1200,13 @@ static struct inode_entry *get_entry(voi
static int __get_stat(struct inode_entry *entry)
{
- struct stat64 sb;
+ struct stat sb;
struct name_entry *name;
/* Loop until we find a file that does exist */
while ((name = entry->names) != 0) {
stat_stat++;
- if (lstat64(name->name, &sb) < 0)
+ if (lstat(name->name, &sb) < 0)
fprintf(stderr, "stat %s: %s\n", name->name, strerror(errno));
else if (S_ISREG(sb.st_mode)) {
entry->device = sb.st_dev;
@@ -1231,7 +1227,7 @@ static int __get_stat(struct inode_entry
* Calculate the Hash Value for an Inode Entry
*/
-static unsigned int calc_hash(const struct stat64 *sb)
+static unsigned int calc_hash(const struct stat *sb)
{
return (sb->st_size) % MAXHASH;
}
@@ -1256,7 +1252,7 @@ static int __get_crc(struct inode_entry
}
while ((n = read(f1, b1, BUFSIZE)) > 0)
- crc = crc32(crc, b1, n);
+ crc = crc32(crc, (void *)b1, n);
close(f1);
if (n < 0) {
fprintf(stderr, "read %s: %s\n", entry->names->name, strerror(errno));