]>
git.saurik.com Git - apt.git/blob - apt-pkg/sourcelist.cc
1 // -*- mode: cpp; mode: fold -*-
3 // $Id: sourcelist.cc,v 1.17 1999/10/17 07:30:23 jgg Exp $
4 /* ######################################################################
8 ##################################################################### */
10 // Include Files /*{{{*/
12 #pragma implementation "apt-pkg/sourcelist.h"
15 #include <apt-pkg/sourcelist.h>
16 #include <apt-pkg/error.h>
17 #include <apt-pkg/fileutl.h>
18 #include <apt-pkg/configuration.h>
19 #include <apt-pkg/strutl.h>
27 // SourceList::pkgSourceList - Constructors /*{{{*/
28 // ---------------------------------------------------------------------
30 pkgSourceList::pkgSourceList()
34 pkgSourceList::pkgSourceList(string File
)
39 // SourceList::ReadMainList - Read the main source list from etc /*{{{*/
40 // ---------------------------------------------------------------------
42 bool pkgSourceList::ReadMainList()
44 return Read(_config
->FindFile("Dir::Etc::sourcelist"));
47 // SourceList::Read - Parse the sourcelist file /*{{{*/
48 // ---------------------------------------------------------------------
50 bool pkgSourceList::Read(string File
)
52 // Open the stream for reading
53 ifstream
F(File
.c_str(),ios::in
| ios::nocreate
);
55 return _error
->Errno("ifstream::ifstream","Opening %s",File
.c_str());
57 List
.erase(List
.begin(),List
.end());
61 while (F
.eof() == false)
63 F
.getline(Buffer
,sizeof(Buffer
));
65 _strtabexpand(Buffer
,sizeof(Buffer
));
69 if (Buffer
[0] == '#' || Buffer
[0] == 0)
76 const char *C
= Buffer
;
77 if (ParseQuoteWord(C
,Type
) == false)
78 return _error
->Error("Malformed line %u in source list %s (type)",CurLine
,File
.c_str());
79 if (ParseQuoteWord(C
,URI
) == false)
80 return _error
->Error("Malformed line %u in source list %s (URI)",CurLine
,File
.c_str());
81 if (ParseQuoteWord(C
,Itm
.Dist
) == false)
82 return _error
->Error("Malformed line %u in source list %s (dist)",CurLine
,File
.c_str());
83 if (Itm
.SetType(Type
) == false)
84 return _error
->Error("Malformed line %u in source list %s (type parse)",CurLine
,File
.c_str());
85 if (Itm
.SetURI(URI
) == false)
86 return _error
->Error("Malformed line %u in source list %s (URI parse)",CurLine
,File
.c_str());
88 // Check for an absolute dists specification.
89 if (Itm
.Dist
.empty() == false && Itm
.Dist
[Itm
.Dist
.size() - 1] == '/')
91 if (ParseQuoteWord(C
,Itm
.Section
) == true)
92 return _error
->Error("Malformed line %u in source list %s (Absolute dist)",CurLine
,File
.c_str());
93 Itm
.Dist
= SubstVar(Itm
.Dist
,"$(ARCH)",_config
->Find("APT::Architecture"));
98 // Grab the rest of the dists
99 if (ParseQuoteWord(C
,Itm
.Section
) == false)
100 return _error
->Error("Malformed line %u in source list %s (dist parse)",CurLine
,File
.c_str());
106 while (ParseQuoteWord(C
,Itm
.Section
) == true);
111 // SourceList::Item << - Writes the item to a stream /*{{{*/
112 // ---------------------------------------------------------------------
113 /* This is not suitable for rebuilding the sourcelist file but it good for
115 ostream
&operator <<(ostream
&O
,pkgSourceList::Item
&Itm
)
117 O
<< (int)Itm
.Type
<< ' ' << Itm
.URI
<< ' ' << Itm
.Dist
<< ' ' << Itm
.Section
;
121 // SourceList::Item::SetType - Sets the distribution type /*{{{*/
122 // ---------------------------------------------------------------------
124 bool pkgSourceList::Item::SetType(string S
)
141 // SourceList::Item::SetURI - Set the URI /*{{{*/
142 // ---------------------------------------------------------------------
143 /* For simplicity we strip the scheme off the uri */
144 bool pkgSourceList::Item::SetURI(string S
)
146 if (S
.empty() == true)
149 if (S
.find(':') == string::npos
)
152 S
= SubstVar(S
,"$(ARCH)",_config
->Find("APT::Architecture"));
154 // Make sure that the URN is / postfixed
156 if (URI
[URI
.size() - 1] != '/')
162 // SourceList::Item::PackagesURI - Returns a URI to the packages file /*{{{*/
163 // ---------------------------------------------------------------------
165 string
pkgSourceList::Item::PackagesURI() const
171 if (Dist
[Dist
.size() - 1] == '/')
179 Res
= URI
+ "dists/" + Dist
+ '/' + Section
+
180 "/binary-" + _config
->Find("APT::Architecture") + '/';
186 if (Dist
[Dist
.size() - 1] == '/')
189 Res
= URI
+ "dists/" + Dist
+ '/' + Section
+
198 // SourceList::Item::PackagesInfo - Shorter version of the URI /*{{{*/
199 // ---------------------------------------------------------------------
200 /* This is a shorter version that is designed to be < 60 chars or so */
201 string
pkgSourceList::Item::PackagesInfo() const
207 Res
+= SiteOnly(URI
) + ' ';
208 if (Dist
[Dist
.size() - 1] == '/')
214 Res
+= Dist
+ '/' + Section
;
220 Res
+= SiteOnly(URI
) + ' ';
221 if (Dist
[Dist
.size() - 1] == '/')
224 Res
+= Dist
+ '/' + Section
;
232 // SourceList::Item::ReleaseURI - Returns a URI to the release file /*{{{*/
233 // ---------------------------------------------------------------------
235 string
pkgSourceList::Item::ReleaseURI() const
241 if (Dist
[Dist
.size() - 1] == '/')
249 Res
= URI
+ "dists/" + Dist
+ '/' + Section
+
250 "/binary-" + _config
->Find("APT::Architecture") + '/';
256 if (Dist
[Dist
.size() - 1] == '/')
259 Res
= URI
+ "dists/" + Dist
+ '/' + Section
+
268 // SourceList::Item::ReleaseInfo - Shorter version of the URI /*{{{*/
269 // ---------------------------------------------------------------------
270 /* This is a shorter version that is designed to be < 60 chars or so */
271 string
pkgSourceList::Item::ReleaseInfo() const
278 Res
+= SiteOnly(URI
) + ' ';
279 if (Dist
[Dist
.size() - 1] == '/')
285 Res
+= Dist
+ '/' + Section
;
293 // SourceList::Item::ArchiveInfo - Shorter version of the archive spec /*{{{*/
294 // ---------------------------------------------------------------------
295 /* This is a shorter version that is designed to be < 60 chars or so */
296 string
pkgSourceList::Item::ArchiveInfo(pkgCache::VerIterator Ver
) const
303 Res
+= SiteOnly(URI
) + ' ';
304 if (Dist
[Dist
.size() - 1] == '/')
310 Res
+= Dist
+ '/' + Section
;
313 Res
+= Ver
.ParentPkg().Name();
322 // SourceList::Item::ArchiveURI - Returns a URI to the given archive /*{{{*/
323 // ---------------------------------------------------------------------
325 string
pkgSourceList::Item::ArchiveURI(string File
) const
338 // SourceList::Item::SourceInfo - Returns an info line for a source /*{{{*/
339 // ---------------------------------------------------------------------
341 string
pkgSourceList::Item::SourceInfo(string Pkg
,string Ver
,string Comp
) const
348 Res
+= SiteOnly(URI
) + ' ';
349 if (Dist
[Dist
.size() - 1] == '/')
355 Res
+= Dist
+ '/' + Section
;
361 if (Comp
.empty() == false)
362 Res
+= " (" + Comp
+ ")";
368 // SourceList::Item::SiteOnly - Strip off the path part of a URI /*{{{*/
369 // ---------------------------------------------------------------------
371 string
pkgSourceList::Item::SiteOnly(string URI
) const
375 U
.Password
= string();