forked from rptb1/p4python
-
Notifications
You must be signed in to change notification settings - Fork 0
/
PythonClientUser.h
118 lines (99 loc) · 4.19 KB
/
PythonClientUser.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/*
* PythonClientUser. Subclass of P4::ClientUser
*
* Copyright (c) 2007-2008, Perforce Software, Inc. All rights reserved.
* Portions Copyright (c) 1999, Mike Meyer. All rights reserved.
* Portions Copyright (c) 2004-2007, Robert Cowham. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL PERFORCE SOFTWARE, INC. BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: //depot/r13.1/p4-python/PythonClientUser.h#1 $
*
* Build instructions:
* Use Distutils - see accompanying setup.py
*
* python setup.py install
*
*/
#ifndef PYTHON_CLIENT_USER_H
#define PYTHON_CLIENT_USER_H
class ClientProgress;
class PythonClientUser : public ClientUser, public KeepAlive
{
public:
PythonClientUser( SpecMgr *s );
virtual ~PythonClientUser();
// Client User methods overridden here
virtual void HandleError( Error *e );
virtual void Message( Error *err );
virtual void OutputText( const char *data, int length );
virtual void OutputInfo( char level, const char *data );
virtual void OutputStat( StrDict *values );
virtual void OutputBinary( const char *data, int length );
virtual void InputData( StrBuf *strbuf, Error *e );
virtual void Diff( FileSys *f1, FileSys *f2, int doPage,
char *diffFlags, Error *e );
virtual void Prompt( const StrPtr &msg, StrBuf &rsp, int noEcho, Error *e );
virtual int Resolve( ClientMerge *m, Error *e );
virtual int Resolve( ClientResolveA *m, int preview, Error *e );
virtual ClientProgress *CreateProgress( int );
virtual int ProgressIndicator();
virtual void Finished();
// Local methods
PyObject * SetInput( PyObject * i );
PyObject * GetInput() { Py_INCREF(input); return input; }
PyObject * SetResolver( PyObject * i );
PyObject * GetResolver() { Py_INCREF(resolver); return resolver; }
PyObject * SetHandler( PyObject * i );
PyObject * GetHandler() { Py_INCREF(handler); return handler; }
PyObject * SetProgress( PyObject * p );
PyObject * GetProgress() { Py_INCREF(progress); return progress; }
void SetCommand( const char *c ) { cmd = c; }
void SetApiLevel( int level );
void SetTrack(bool t) { track = t; }
P4Result& GetResults() { return results; }
int ErrorCount();
void Reset();
// Debugging support
void SetDebug( int d ) { debug = d; }
// override from KeepAlive
virtual int IsAlive() { return alive; }
private:
PyObject * MkMergeInfo( ClientMerge *m, StrPtr &hint );
PyObject * MkActionMergeInfo( ClientResolveA *m, StrPtr &hint );
void ProcessOutput( const char * method, PyObject * data);
void ProcessMessage( Error * e);
bool CallOutputMethod( const char * method, PyObject * data);
private:
StrBuf cmd;
SpecMgr * specMgr;
P4Result results;
PyObject * input;
PyObject * resolver;
PyObject * handler;
PyObject * progress;
int debug;
int apiLevel;
int alive;
bool track;
};
#endif