about summary refs log tree commit diff
path: root/pkgs/applications/version-management/cvsps
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2008-04-06 20:04:40 +0000
committerLudovic Courtès <ludo@gnu.org>2008-04-06 20:04:40 +0000
commit07e3e560823cf63b9d971bece6c86cecd294cf5b (patch)
tree7172f4ee0ff721f01a49e8f0de642f060ebf493a /pkgs/applications/version-management/cvsps
parent1923d17a7d48f4a439026791a241c2f8c48b3ca3 (diff)
downloadnixlib-07e3e560823cf63b9d971bece6c86cecd294cf5b.tar
nixlib-07e3e560823cf63b9d971bece6c86cecd294cf5b.tar.gz
nixlib-07e3e560823cf63b9d971bece6c86cecd294cf5b.tar.bz2
nixlib-07e3e560823cf63b9d971bece6c86cecd294cf5b.tar.lz
nixlib-07e3e560823cf63b9d971bece6c86cecd294cf5b.tar.xz
nixlib-07e3e560823cf63b9d971bece6c86cecd294cf5b.tar.zst
nixlib-07e3e560823cf63b9d971bece6c86cecd294cf5b.zip
cvsps: Add Debian patches.
svn path=/nixpkgs/trunk/; revision=11472
Diffstat (limited to 'pkgs/applications/version-management/cvsps')
-rw-r--r--pkgs/applications/version-management/cvsps/01_ignoretrunk.dpatch23
-rw-r--r--pkgs/applications/version-management/cvsps/02_dynamicbufferalloc.dpatch125
-rw-r--r--pkgs/applications/version-management/cvsps/03_diffoptstypo.dpatch19
-rw-r--r--pkgs/applications/version-management/cvsps/default.nix5
4 files changed, 172 insertions, 0 deletions
diff --git a/pkgs/applications/version-management/cvsps/01_ignoretrunk.dpatch b/pkgs/applications/version-management/cvsps/01_ignoretrunk.dpatch
new file mode 100644
index 000000000000..39185ae2bfa6
--- /dev/null
+++ b/pkgs/applications/version-management/cvsps/01_ignoretrunk.dpatch
@@ -0,0 +1,23 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 01_ignoretrunk.dpatch by  <crafterm@debian.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Ignore TRUNK branch name patch
+
+@DPATCH@
+
+diff -urN cvsps-2.1.orig/cvsps.c cvsps-2.1/cvsps.c
+--- cvsps-2.1.orig/cvsps.c	2005-05-25 22:39:40.000000000 -0500
++++ cvsps-2.1/cvsps.c	2005-06-19 23:07:20.000000000 -0500
+@@ -2104,6 +2109,11 @@
+     
+     if (!get_branch_ext(rev, eot, &leaf))
+     {
++	if (strcmp(tag, "TRUNK") == 0)
++	{
++	    debug(DEBUG_STATUS, "ignoring the TRUNK branch/tag");
++	    return;
++	}
+ 	debug(DEBUG_APPERROR, "malformed revision");
+ 	exit(1);
+     }
diff --git a/pkgs/applications/version-management/cvsps/02_dynamicbufferalloc.dpatch b/pkgs/applications/version-management/cvsps/02_dynamicbufferalloc.dpatch
new file mode 100644
index 000000000000..70ffb02a21aa
--- /dev/null
+++ b/pkgs/applications/version-management/cvsps/02_dynamicbufferalloc.dpatch
@@ -0,0 +1,125 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 02_dynamicbufferalloc.dpatch by  <crafterm@debian.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Dynamic buffer allocation
+
+@DPATCH@
+
+diff -urN cvsps-2.1-orig/cache.c cvsps-2.1/cache.c
+--- cvsps-2.1-orig/cache.c	2005-05-25 22:39:40.000000000 -0500
++++ cvsps-2.1/cache.c	2005-07-26 15:21:29.716569500 -0500
+@@ -108,10 +108,19 @@
+     int tag_flags = 0;
+     char branchbuff[LOG_STR_MAX] = "";
+     int branch_add = 0;
+-    char logbuff[LOG_STR_MAX] = "";
++    int logbufflen = LOG_STR_MAX + 1;
++    char * logbuff = malloc(logbufflen);
+     time_t cache_date = -1;
+     int read_version;
+ 
++    if (logbuff == NULL)
++    {
++	debug(DEBUG_SYSERROR, "could not malloc %d bytes for logbuff in read_cache", logbufflen);
++	exit(1);
++    }
++
++    logbuff[0] = 0;
++
+     if (!(fp = cache_open("r")))
+ 	goto out;
+ 
+@@ -299,8 +308,19 @@
+ 	    else
+ 	    {
+ 		/* Make sure we have enough in the buffer */
+-		if (strlen(logbuff)+strlen(buff)<LOG_STR_MAX)
+-		    strcat(logbuff, buff);
++		int len = strlen(buff);
++		if (strlen(logbuff) + len >= LOG_STR_MAX)
++		{
++		    logbufflen += (len >= LOG_STR_MAX ? (len+1) : LOG_STR_MAX);
++		    char * newlogbuff = realloc(logbuff, logbufflen);
++		    if (newlogbuff == NULL)
++		    {
++			debug(DEBUG_SYSERROR, "could not realloc %d bytes for logbuff in read_cache", logbufflen);
++			exit(1);
++		    }
++		    logbuff = newlogbuff;
++		}
++		strcat(logbuff, buff);
+ 	    }
+ 	    break;
+ 	case CACHE_NEED_PS_MEMBERS:
+@@ -332,6 +352,7 @@
+  out_close:
+     fclose(fp);
+  out:
++    free(logbuff);
+     return cache_date;
+ }
+ 
+diff -urN cvsps-2.1-orig/cvsps.c cvsps-2.1/cvsps.c
+--- cvsps-2.1-orig/cvsps.c	2005-05-25 22:39:40.000000000 -0500
++++ cvsps-2.1/cvsps.c	2005-07-26 15:22:02.558230700 -0500
+@@ -265,7 +265,8 @@
+     PatchSetMember * psm = NULL;
+     char datebuff[20];
+     char authbuff[AUTH_STR_MAX];
+-    char logbuff[LOG_STR_MAX + 1];
++    int logbufflen = LOG_STR_MAX + 1;
++    char * logbuff = malloc(logbufflen);
+     int loglen = 0;
+     int have_log = 0;
+     char cmd[BUFSIZ];
+@@ -273,6 +274,12 @@
+     char use_rep_buff[PATH_MAX];
+     char * ltype;
+ 
++    if (logbuff == NULL)
++    {
++	debug(DEBUG_SYSERROR, "could not malloc %d bytes for logbuff in load_from_cvs", logbufflen);
++	exit(1);
++    }
++
+     if (!no_rlog && !test_log_file && cvs_check_cap(CAP_HAVE_RLOG))
+     {
+ 	ltype = "rlog";
+@@ -480,24 +487,22 @@
+ 		 */
+ 		if (have_log || !is_revision_metadata(buff))
+ 		{
+-		    /* if the log buffer is full, that's it.  
+-		     * 
+-		     * Also, read lines (fgets) always have \n in them
+-		     * which we count on.  So if truncation happens,
+-		     * be careful to put a \n on.
+-		     * 
+-		     * Buffer has LOG_STR_MAX + 1 for room for \0 if
+-		     * necessary
+-		     */
+-		    if (loglen < LOG_STR_MAX)
++		    /* If the log buffer is full, try to reallocate more. */
++		    if (loglen < logbufflen)
+ 		    {
+ 			int len = strlen(buff);
+ 			
+-			if (len >= LOG_STR_MAX - loglen)
++			if (len >= logbufflen - loglen)
+ 			{
+-			    debug(DEBUG_APPMSG1, "WARNING: maximum log length exceeded, truncating log");
+-			    len = LOG_STR_MAX - loglen;
+-			    buff[len - 1] = '\n';
++			    debug(DEBUG_STATUS, "reallocating logbufflen to %d bytes for file %s", logbufflen, file->filename);
++			    logbufflen += (len >= LOG_STR_MAX ? (len+1) : LOG_STR_MAX);
++			    char * newlogbuff = realloc(logbuff, logbufflen);
++			    if (newlogbuff == NULL)
++			    {
++				debug(DEBUG_SYSERROR, "could not realloc %d bytes for logbuff in load_from_cvs", logbufflen);
++				exit(1);
++			    }
++			    logbuff = newlogbuff;
+ 			}
+ 
+ 			debug(DEBUG_STATUS, "appending %s to log", buff);
diff --git a/pkgs/applications/version-management/cvsps/03_diffoptstypo.dpatch b/pkgs/applications/version-management/cvsps/03_diffoptstypo.dpatch
new file mode 100644
index 000000000000..eb3818ed97e9
--- /dev/null
+++ b/pkgs/applications/version-management/cvsps/03_diffoptstypo.dpatch
@@ -0,0 +1,19 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 03_diffoptstypo.dpatch by  <crafterm@debian.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Diff opts typo fix
+
+@DPATCH@
+
+--- cvsps-2.1-orig/cvsps.1	2005-05-26 05:39:40.000000000 +0200
++++ cvsps-2.1/cvsps.1	2005-07-28 15:17:48.885112048 +0200
+@@ -83,7 +83,7 @@
+ disable the use of rlog internally.  Note: rlog is
+ required for stable PatchSet numbering.  Use with care.
+ .TP
+-.B \-\-diffs\-opts <option string>
++.B \-\-diff\-opts <option string>
+ send a custom set of options to diff, for example to increase
+ the number of context lines, or change the diff format.
+ .TP
diff --git a/pkgs/applications/version-management/cvsps/default.nix b/pkgs/applications/version-management/cvsps/default.nix
index 52ea9e9feea2..bea43f77d069 100644
--- a/pkgs/applications/version-management/cvsps/default.nix
+++ b/pkgs/applications/version-management/cvsps/default.nix
@@ -7,6 +7,11 @@ stdenv.mkDerivation rec {
     sha256 = "0nh7q7zcmagx0i63h6fqqkkq9i55k77myvb8h6jn2f266f5iklwi";
   };
 
+  # Patches from Debian's `cvsps-2.1-4'.
+  patches = [ ./01_ignoretrunk.dpatch
+              ./02_dynamicbufferalloc.dpatch
+	      ./03_diffoptstypo.dpatch ];
+
   buildInputs = [ cvs zlib ];
 
   installPhase = "make install prefix=$out";