// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
-// $Id: indexcopy.cc,v 1.4 2000/01/16 05:36:17 jgg Exp $
+// $Id: indexcopy.cc,v 1.5 2000/05/10 06:02:26 jgg Exp $
/* ######################################################################
Index Copying - Aid for copying and verifying the index files
// ---------------------------------------------------------------------
/* We look for things in dists/ notation and convert them to
<dist> <component> form otherwise it is left alone. This also strips
- the CD path. */
+ the CD path.
+
+ This implements a regex sort of like:
+ (.*)/dists/([^/]*)/(.*)/binary-*
+ ^ ^ ^- Component
+ | |-------- Distribution
+ |------------------- Path
+
+ It was deciced to use only a single word for dist (rather than say
+ unstable/non-us) to increase the chance that each CD gets a single
+ line in sources.list.
+ */
void IndexCopy::ConvertToSourceList(string CD,string &Path)
{
char S[300];
string Dist = string(Path,Slash,Slash2 - Slash);
// Isolate the component
- Slash = Path.find('/',Slash2+1);
- if (Slash == string::npos || Slash + 2 >= Path.length())
- return;
- string Comp = string(Path,Slash2+1,Slash - Slash2-1);
-
- // Verify the trailing binar - bit
- Slash2 = Path.find('/',Slash + 1);
- if (Slash == string::npos)
- return;
- string Binary = string(Path,Slash+1,Slash2 - Slash-1);
-
- if (Binary != S && Binary != "source")
+ Slash = Slash2;
+ for (unsigned I = 0; I != 10; I++)
+ {
+ Slash = Path.find('/',Slash+1);
+ if (Slash == string::npos || Slash + 2 >= Path.length())
+ return;
+ string Comp = string(Path,Slash2+1,Slash - Slash2-1);
+
+ // Verify the trailing binary- bit
+ string::size_type BinSlash = Path.find('/',Slash + 1);
+ if (Slash == string::npos)
+ return;
+ string Binary = string(Path,Slash+1,BinSlash - Slash-1);
+
+ if (Binary != S && Binary != "source")
+ continue;
+
+ Path = Dist + ' ' + Comp;
return;
-
- Path = Dist + ' ' + Comp;
+ }
}
/*}}}*/
// IndexCopy::GrabFirst - Return the first Depth path components /*{{{*/