portacode 0.3.16.dev5__tar.gz → 0.3.16.dev7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/PKG-INFO +1 -1
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/_version.py +2 -2
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/connection/handlers/project_state_handlers.py +29 -6
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode.egg-info/PKG-INFO +1 -1
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/.claude/agents/communication-manager.md +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/.claude/settings.local.json +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/.gitignore +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/.gitmodules +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/LICENSE +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/MANIFEST.in +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/Makefile +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/README.md +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/backup.sh +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/docker-compose.yaml +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/README.md +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/__init__.py +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/__main__.py +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/cli.py +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/connection/README.md +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/connection/__init__.py +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/connection/client.py +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/connection/handlers/README.md +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/connection/handlers/WEBSOCKET_PROTOCOL.md +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/connection/handlers/__init__.py +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/connection/handlers/base.py +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/connection/handlers/file_handlers.py +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/connection/handlers/registry.py +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/connection/handlers/session.py +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/connection/handlers/system_handlers.py +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/connection/handlers/terminal_handlers.py +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/connection/multiplex.py +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/connection/terminal.py +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/data.py +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/keypair.py +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/service.py +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode.egg-info/SOURCES.txt +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode.egg-info/dependency_links.txt +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode.egg-info/entry_points.txt +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode.egg-info/requires.txt +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode.egg-info/top_level.txt +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/pyproject.toml +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/restore.sh +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/setup.cfg +0 -0
- {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/setup.py +0 -0
|
@@ -17,5 +17,5 @@ __version__: str
|
|
|
17
17
|
__version_tuple__: VERSION_TUPLE
|
|
18
18
|
version_tuple: VERSION_TUPLE
|
|
19
19
|
|
|
20
|
-
__version__ = version = '0.3.16.
|
|
21
|
-
__version_tuple__ = version_tuple = (0, 3, 16, '
|
|
20
|
+
__version__ = version = '0.3.16.dev7'
|
|
21
|
+
__version_tuple__ = version_tuple = (0, 3, 16, 'dev7')
|
|
@@ -49,6 +49,7 @@ class FileItem:
|
|
|
49
49
|
is_git_tracked: Optional[bool] = None
|
|
50
50
|
git_status: Optional[str] = None
|
|
51
51
|
is_hidden: bool = False
|
|
52
|
+
is_ignored: bool = False
|
|
52
53
|
children: Optional[List['FileItem']] = None
|
|
53
54
|
is_expanded: bool = False
|
|
54
55
|
is_loaded: bool = False
|
|
@@ -107,12 +108,21 @@ class GitManager:
|
|
|
107
108
|
def get_file_status(self, file_path: str) -> Dict[str, Any]:
|
|
108
109
|
"""Get Git status for a specific file."""
|
|
109
110
|
if not self.is_git_repo or not self.repo:
|
|
110
|
-
return {"is_tracked": False, "status": None}
|
|
111
|
+
return {"is_tracked": False, "status": None, "is_ignored": False}
|
|
111
112
|
|
|
112
113
|
try:
|
|
113
114
|
# Convert to relative path from repo root
|
|
114
115
|
rel_path = os.path.relpath(file_path, self.repo.working_dir)
|
|
115
116
|
|
|
117
|
+
# Check if file is ignored
|
|
118
|
+
is_ignored = False
|
|
119
|
+
try:
|
|
120
|
+
# Use git check-ignore to see if file is ignored
|
|
121
|
+
self.repo.git.check_ignore(rel_path)
|
|
122
|
+
is_ignored = True
|
|
123
|
+
except Exception:
|
|
124
|
+
is_ignored = False
|
|
125
|
+
|
|
116
126
|
# Check if file is tracked
|
|
117
127
|
try:
|
|
118
128
|
self.repo.git.ls_files(rel_path, error_unmatch=True)
|
|
@@ -128,16 +138,18 @@ class GitManager:
|
|
|
128
138
|
status = "modified"
|
|
129
139
|
else:
|
|
130
140
|
status = "clean"
|
|
141
|
+
elif is_ignored:
|
|
142
|
+
status = "ignored"
|
|
131
143
|
else:
|
|
132
144
|
# Check if it's untracked
|
|
133
145
|
if os.path.exists(file_path):
|
|
134
146
|
status = "untracked"
|
|
135
147
|
|
|
136
|
-
return {"is_tracked": is_tracked, "status": status}
|
|
148
|
+
return {"is_tracked": is_tracked, "status": status, "is_ignored": is_ignored}
|
|
137
149
|
|
|
138
150
|
except Exception as e:
|
|
139
151
|
logger.debug("Error getting Git status for %s: %s", file_path, e)
|
|
140
|
-
return {"is_tracked": False, "status": None}
|
|
152
|
+
return {"is_tracked": False, "status": None, "is_ignored": False}
|
|
141
153
|
|
|
142
154
|
def get_status_summary(self) -> Dict[str, int]:
|
|
143
155
|
"""Get summary of Git status."""
|
|
@@ -334,26 +346,32 @@ class ProjectStateManager:
|
|
|
334
346
|
with os.scandir(directory_path) as entries:
|
|
335
347
|
for entry in entries:
|
|
336
348
|
try:
|
|
349
|
+
# Skip .git folders and their contents
|
|
350
|
+
if entry.name == '.git' and entry.is_dir():
|
|
351
|
+
continue
|
|
352
|
+
|
|
337
353
|
stat_info = entry.stat()
|
|
338
354
|
is_hidden = entry.name.startswith('.')
|
|
339
355
|
|
|
340
356
|
# Get Git status if available
|
|
341
|
-
git_info = {"is_tracked": False, "status": None}
|
|
357
|
+
git_info = {"is_tracked": False, "status": None, "is_ignored": False}
|
|
342
358
|
if git_manager:
|
|
343
359
|
git_info = git_manager.get_file_status(entry.path)
|
|
344
360
|
|
|
345
361
|
# Check if this directory is expanded
|
|
346
|
-
is_expanded =
|
|
362
|
+
is_expanded = False
|
|
347
363
|
|
|
348
364
|
file_item = FileItem(
|
|
349
365
|
name=entry.name,
|
|
350
366
|
path=entry.path,
|
|
351
367
|
is_directory=entry.is_dir(),
|
|
368
|
+
parent_path=directory_path,
|
|
352
369
|
size=stat_info.st_size if entry.is_file() else None,
|
|
353
370
|
modified_time=stat_info.st_mtime,
|
|
354
371
|
is_git_tracked=git_info["is_tracked"],
|
|
355
372
|
git_status=git_info["status"],
|
|
356
373
|
is_hidden=is_hidden,
|
|
374
|
+
is_ignored=git_info["is_ignored"],
|
|
357
375
|
is_expanded=is_expanded,
|
|
358
376
|
is_loaded=not entry.is_dir() # Files are always "loaded", directories need expansion
|
|
359
377
|
)
|
|
@@ -414,11 +432,15 @@ class ProjectStateManager:
|
|
|
414
432
|
with os.scandir(directory_path) as entries:
|
|
415
433
|
for entry in entries:
|
|
416
434
|
try:
|
|
435
|
+
# Skip .git folders and their contents
|
|
436
|
+
if entry.name == '.git' and entry.is_dir():
|
|
437
|
+
continue
|
|
438
|
+
|
|
417
439
|
stat_info = entry.stat()
|
|
418
440
|
is_hidden = entry.name.startswith('.')
|
|
419
441
|
|
|
420
442
|
# Get Git status if available
|
|
421
|
-
git_info = {"is_tracked": False, "status": None}
|
|
443
|
+
git_info = {"is_tracked": False, "status": None, "is_ignored": False}
|
|
422
444
|
if git_manager:
|
|
423
445
|
git_info = git_manager.get_file_status(entry.path)
|
|
424
446
|
|
|
@@ -438,6 +460,7 @@ class ProjectStateManager:
|
|
|
438
460
|
is_git_tracked=git_info["is_tracked"],
|
|
439
461
|
git_status=git_info["status"],
|
|
440
462
|
is_hidden=is_hidden,
|
|
463
|
+
is_ignored=git_info["is_ignored"],
|
|
441
464
|
is_expanded=is_expanded,
|
|
442
465
|
is_loaded=not entry.is_dir()
|
|
443
466
|
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/connection/handlers/WEBSOCKET_PROTOCOL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/connection/handlers/file_handlers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/connection/handlers/system_handlers.py
RENAMED
|
File without changes
|
{portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/connection/handlers/terminal_handlers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|