- remove hardcoded gpg path (Ralf Corsepius)
[apt.git] / cmdline / apt-config.cc
1 // -*- mode: cpp; mode: fold -*-
2 // Description                                                          /*{{{*/
3 // $Id: apt-config.cc,v 1.5 2003/01/29 18:43:48 niemeyer Exp $
4 /* ######################################################################
5    
6    APT Config - Program to manipulate APT configuration files
7    
8    This program will parse a config file and then do something with it.
9    
10    Commands:
11      shell - Shell mode. After this a series of word pairs should occure.
12              The first is the environment var to set and the second is
13              the key to set it from. Use like: 
14  eval `apt-config shell QMode apt::QMode`
15    
16    ##################################################################### */
17                                                                         /*}}}*/
18 // Include Files                                                        /*{{{*/
19 #include <apt-pkg/cmndline.h>
20 #include <apt-pkg/error.h>
21 #include <apt-pkg/init.h>
22 #include <apt-pkg/strutl.h>
23
24 #include <config.h>
25 #include <apti18n.h>
26
27 // CNC:2003-02-14 - apti18n.h includes libintl.h which includes locale.h,
28 //                  as reported by Radu Greab.
29 //#include <locale.h>
30 #include <iostream>
31 #include <string>
32                                                                         /*}}}*/
33 using namespace std;
34
35 // DoShell - Handle the shell command                                   /*{{{*/
36 // ---------------------------------------------------------------------
37 /* */
38 bool DoShell(CommandLine &CmdL)
39 {
40    for (const char **I = CmdL.FileList + 1; *I != 0; I += 2)
41    {
42       if (I[1] == 0 || strlen(I[1]) == 0)
43          return _error->Error(_("Arguments not in pairs"));
44
45       string key = I[1];
46       if (key.end()[-1] == '/') // old directory format
47          key.append("d");
48
49       if (_config->ExistsAny(key.c_str()))
50          cout << *I << "='" << 
51                  SubstVar(_config->FindAny(key.c_str()),"'","'\\''") << '\'' << endl;
52       
53    }
54    
55    return true;
56 }
57                                                                         /*}}}*/
58 // DoDump - Dump the configuration space                                /*{{{*/
59 // ---------------------------------------------------------------------
60 /* */
61 bool DoDump(CommandLine &CmdL)
62 {
63    _config->Dump(cout);
64    return true;
65 }
66                                                                         /*}}}*/
67 // ShowHelp - Show the help screen                                      /*{{{*/
68 // ---------------------------------------------------------------------
69 /* */
70 int ShowHelp()
71 {
72    ioprintf(cout,_("%s %s for %s %s compiled on %s %s\n"),PACKAGE,VERSION,
73             COMMON_OS,COMMON_CPU,__DATE__,__TIME__);
74    if (_config->FindB("version") == true)
75       return 0;
76    
77    cout <<
78     _("Usage: apt-config [options] command\n"
79       "\n"
80       "apt-config is a simple tool to read the APT config file\n"
81       "\n"
82       "Commands:\n"
83       "   shell - Shell mode\n"
84       "   dump - Show the configuration\n"
85       "\n"
86       "Options:\n"
87       "  -h   This help text.\n" 
88       "  -c=? Read this configuration file\n" 
89       "  -o=? Set an arbitary configuration option, eg -o dir::cache=/tmp\n");
90    return 0;
91 }
92                                                                         /*}}}*/
93
94 int main(int argc,const char *argv[])
95 {
96    CommandLine::Args Args[] = {
97       {'h',"help","help",0},
98       {'v',"version","version",0},
99       {'c',"config-file",0,CommandLine::ConfigFile},
100       {'o',"option",0,CommandLine::ArbItem},
101       {0,0,0,0}};
102    CommandLine::Dispatch Cmds[] = {{"shell",&DoShell},
103                                    {"dump",&DoDump},
104                                    {0,0}};
105
106    // Set up gettext support
107    setlocale(LC_ALL,"");
108    textdomain(PACKAGE);
109
110    // Parse the command line and initialize the package library
111    CommandLine CmdL(Args,_config);
112    if (pkgInitConfig(*_config) == false ||
113        CmdL.Parse(argc,argv) == false ||
114        pkgInitSystem(*_config,_system) == false)
115    {
116       _error->DumpErrors();
117       return 100;
118    }
119
120    // See if the help should be shown
121    if (_config->FindB("help") == true ||
122        CmdL.FileSize() == 0)
123       return ShowHelp();
124
125    // Match the operation
126    CmdL.DispatchArg(Cmds);
127    
128    // Print any errors or warnings found during parsing
129    if (_error->empty() == false)
130    {
131       bool Errors = _error->PendingError();
132       _error->DumpErrors();
133       return Errors == true?100:0;
134    }
135    
136    return 0;
137 }