pyjallib 0.1.15__py3-none-any.whl → 0.1.16__py3-none-any.whl

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.
pyjallib/__init__.py CHANGED
@@ -6,7 +6,7 @@ pyjallib Package
6
6
  Python library for game character development pipeline.
7
7
  """
8
8
 
9
- __version__ = '0.1.15'
9
+ __version__ = '0.1.16'
10
10
 
11
11
  # reload_modules 함수를 패키지 레벨에서 사용 가능하게 함
12
12
  from pyjallib.namePart import NamePart, NamePartType
pyjallib/max/skeleton.py CHANGED
@@ -164,7 +164,6 @@ class Skeleton:
164
164
  returnArray = []
165
165
  nodeArray = self.get_dependencies(inObjs)
166
166
 
167
-
168
167
  # 애드온 레이어의 노드들만 필터링
169
168
  addOnArray = []
170
169
  for item in nodeArray:
@@ -172,13 +171,7 @@ class Skeleton:
172
171
  addOnArray.append(item)
173
172
 
174
173
  # 애드온 노드들의 의존성 가져오기
175
- addOnRefArray = []
176
- progress = Progress("Get All Dependencies", inTotalSteps=len(addOnArray))
177
- for i,item in enumerate(addOnArray):
178
- refs = self.get_dependencies(item)
179
- progress.update(i)
180
-
181
- addOnRefArray.extend(refs)
174
+ addOnRefArray = self.get_dependencies(addOnArray)
182
175
 
183
176
  # 모든 노드들을 returnArray에 추가 (중복 없이)
184
177
  for item in nodeArray:
pyjallib/perforce.py CHANGED
@@ -604,20 +604,31 @@ class Perforce:
604
604
  if not self._is_connected():
605
605
  return False
606
606
  logger.info(f"체인지 리스트 {change_list_number} 제출 시도...")
607
+
608
+ submit_success = False
607
609
  try:
608
610
  self.p4.run_submit("-c", change_list_number)
609
611
  logger.info(f"체인지 리스트 {change_list_number} 제출 성공.")
610
-
611
- # 제출 후 변경사항이 없는 체크아웃된 파일들을 자동으로 리버트
612
- if auto_revert_unchanged:
613
- self._auto_revert_unchanged_files(change_list_number)
614
-
615
- return True
612
+ submit_success = True
616
613
  except P4Exception as e:
617
614
  self._handle_p4_exception(e, f"체인지 리스트 {change_list_number} 제출")
618
615
  if any("nothing to submit" in err.lower() for err in self.p4.errors):
619
616
  logger.warning(f"체인지 리스트 {change_list_number}에 제출할 파일이 없습니다.")
620
- return False
617
+ submit_success = False
618
+
619
+ # 제출 성공 여부와 관계없이 후속 작업 실행
620
+ try:
621
+ # 제출 후 변경사항이 없는 체크아웃된 파일들을 자동으로 리버트
622
+ if auto_revert_unchanged:
623
+ self._auto_revert_unchanged_files(change_list_number)
624
+ self._auto_revert_unchanged_files_in_default_changelist()
625
+
626
+ # 빈 체인지 리스트 삭제
627
+ self.delete_empty_change_list(change_list_number)
628
+ except Exception as e:
629
+ logger.error(f"체인지 리스트 {change_list_number} 제출 후 후속 작업 중 오류 발생: {e}")
630
+
631
+ return submit_success
621
632
 
622
633
  def _auto_revert_unchanged_files(self, change_list_number: int) -> None:
623
634
  """제출 후 변경사항이 없는 체크아웃된 파일들을 자동으로 리버트합니다.
@@ -682,37 +693,32 @@ class Perforce:
682
693
  """default change list에서 변경사항이 없는 체크아웃된 파일들을 자동으로 리버트합니다."""
683
694
  logger.debug("default change list에서 변경사항이 없는 파일들 자동 리버트 시도...")
684
695
  try:
685
- # default change list에서 체크아웃된 파일들 가져오기
686
- opened_files = self.p4.run_opened("-c", "default")
696
+ # get_default_change_list를 사용해서 default change list 파일들 가져오기
697
+ default_cl_info = self.get_default_change_list()
687
698
 
688
- if not opened_files:
699
+ if not default_cl_info or not default_cl_info.get('Files'):
689
700
  logger.debug("default change list에 체크아웃된 파일이 없습니다.")
690
701
  return
691
702
 
703
+ files_list = default_cl_info.get('Files', [])
692
704
  unchanged_files = []
693
- for file_info in opened_files:
694
- file_path = file_info.get('clientFile', '')
695
- action = file_info.get('action', '')
696
-
697
- # edit 액션의 파일만 확인 (add, delete는 변경사항이 있음)
698
- if action == 'edit':
699
- try:
700
- # p4 diff 명령으로 파일의 변경사항 확인
701
- diff_result = self.p4.run_diff("-sa", file_path)
702
-
703
- # diff 결과가 비어있으면 변경사항이 없음
704
- if not diff_result:
705
- unchanged_files.append(file_path)
706
- logger.debug(f"default change list의 파일 '{file_path}'에 변경사항이 없어 리버트 대상으로 추가")
707
- else:
708
- logger.debug(f"default change list의 파일 '{file_path}'에 변경사항이 있어 리버트하지 않음")
709
-
710
- except P4Exception as e:
711
- # diff 명령 실패 시에도 리버트 대상으로 추가 (안전하게 처리)
705
+
706
+ for file_path in files_list:
707
+ try:
708
+ # p4 diff 명령으로 파일의 변경사항 확인
709
+ diff_result = self.p4.run_diff("-sa", file_path)
710
+
711
+ # diff 결과가 비어있으면 변경사항이 없음
712
+ if not diff_result:
712
713
  unchanged_files.append(file_path)
713
- logger.debug(f"default change list의 파일 '{file_path}' diff 확인 실패, 리버트 대상으로 추가: {e}")
714
- else:
715
- logger.debug(f"default change list의 파일 '{file_path}' {action} 액션이므로 리버트하지 않음")
714
+ logger.debug(f"default change list의 파일 '{file_path}' 변경사항이 없어 리버트 대상으로 추가")
715
+ else:
716
+ logger.debug(f"default change list의 파일 '{file_path}' 변경사항이 있어 리버트하지 않음")
717
+
718
+ except P4Exception as e:
719
+ # diff 명령 실패 시에도 리버트 대상으로 추가 (안전하게 처리)
720
+ unchanged_files.append(file_path)
721
+ logger.debug(f"default change list의 파일 '{file_path}' diff 확인 실패, 리버트 대상으로 추가: {e}")
716
722
 
717
723
  # 변경사항이 없는 파일들을 리버트
718
724
  if unchanged_files:
@@ -1173,3 +1179,29 @@ class Perforce:
1173
1179
 
1174
1180
  logger.info(f"다른 사용자에 의해 체크아웃된 파일: {len(files_by_others)}개")
1175
1181
  return files_by_others
1182
+
1183
+ def get_default_change_list(self) -> dict:
1184
+ """default change list의 정보를 가져옵니다.
1185
+
1186
+ Returns:
1187
+ dict: get_change_list_by_number와 동일한 형태의 딕셔너리
1188
+ """
1189
+ if not self._is_connected():
1190
+ return {}
1191
+ logger.debug("default change list 정보 조회 중...")
1192
+ try:
1193
+ opened_files = self.p4.run_opened("-c", "default")
1194
+ files_list = [f.get('clientFile', '') for f in opened_files]
1195
+ result = {
1196
+ 'Change': 'default',
1197
+ 'Description': 'Default change',
1198
+ 'User': getattr(self.p4, 'user', ''),
1199
+ 'Client': getattr(self.p4, 'client', ''),
1200
+ 'Status': 'pending',
1201
+ 'Files': files_list
1202
+ }
1203
+ logger.info(f"default change list 정보 조회 완료: {len(files_list)}개 파일")
1204
+ return result
1205
+ except P4Exception as e:
1206
+ self._handle_p4_exception(e, "default change list 정보 조회")
1207
+ return {}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyjallib
3
- Version: 0.1.15
3
+ Version: 0.1.16
4
4
  Summary: A utility library for 3D game character development pipelines.
5
5
  Author-email: Dongseok Kim <jalnagakds@gmail.com>
6
6
  Requires-Python: >=3.10
@@ -1,9 +1,9 @@
1
- pyjallib/__init__.py,sha256=jf7VzQoweVj0AiRCD4CeHLUjlvrcoxyKp5rNDL22Drc,509
1
+ pyjallib/__init__.py,sha256=x9MQjDWegE6dAs6jPCgRy9ymBM8DqQ2XpSqGgmLY-tA,509
2
2
  pyjallib/namePart.py,sha256=lKIiOVkWrtAW-D3nuv--vHmdAnlQeVPaXLYUDhcr8QU,24177
3
3
  pyjallib/nameToPath.py,sha256=aBeezepLYdpv3VYxnQ2c4ZWzz2WjticXjkdbAIlVa1k,4676
4
4
  pyjallib/naming.py,sha256=b2C-P9VWV4Q2StqkizEwABblYOC5g6sXHzN0KpOZ_Ys,37419
5
5
  pyjallib/namingConfig.py,sha256=QGpK5mCnRiclKqNKz3GJ2PeJO8fbVitAEdqWwnwo8oA,34127
6
- pyjallib/perforce.py,sha256=pkCDaso4TAs-au0E8X1JwXPJ-TVbO2Fjz4k_Wh3z8bc,56078
6
+ pyjallib/perforce.py,sha256=VQswiyQ6CHCAgFJO5MjC2Su1qNU4yfAQmFZGapNR6_g,57329
7
7
  pyjallib/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
8
  pyjallib/reloadModules.py,sha256=RAEG3IxzJ0TlsjvnZwJt56JOkc2j8voqAnRbfQuZ44g,1151
9
9
  pyjallib/ConfigFiles/namingConfig.json,sha256=Ov4bbVJb6qodPaooU63e11YUMGXXPWFAA4AQq1sLBYU,1486
@@ -30,7 +30,7 @@ pyjallib/max/name.py,sha256=DcJt2td-N7vfUGyWazdGTD4-0JW-noa7z5nwc6SHm6I,15337
30
30
  pyjallib/max/progress.py,sha256=0_ry9NiYJZGqwBtvR-oGwV40Z57AtOBG0RcuQwwOeq4,1162
31
31
  pyjallib/max/rootMotion.py,sha256=H9kvh9dx4zLLBYuigGyN0XZsdGAF5d7YRBdaokZmCiw,31399
32
32
  pyjallib/max/select.py,sha256=HMJD2WNX3zVBEeYrj0UX2YXM3fHNItfw6UtQSItNsoU,9487
33
- pyjallib/max/skeleton.py,sha256=4U4N2jA0GX4HqX1UOuUM1Yp3eud5ghqSRIO7FV-6poA,8138
33
+ pyjallib/max/skeleton.py,sha256=tjI1h5zObL0TgX3gkebiqosTlEOPglaKfIbsQ14ET50,7896
34
34
  pyjallib/max/skin.py,sha256=5mBzG2wSUxoGlkFeb9Ys8uUxOwuZRGeqUMTI9LiWWZU,41937
35
35
  pyjallib/max/toolManager.py,sha256=ya6beAGzk1_culw4H7lBdr7klnS-Yl8mVGg13A41Q8A,3185
36
36
  pyjallib/max/twistBone.py,sha256=VPZLDE5V6KEW-i5gAberggEeR2YRzLwsFfFQBT4AB1U,17295
@@ -44,6 +44,6 @@ pyjallib/max/macro/jal_macro_helper.py,sha256=hd8e5x56aq7Qt0g-hP5bY0p-njVy8ja77_
44
44
  pyjallib/max/macro/jal_macro_link.py,sha256=E8i3z2xsrQiGDEz4Qoxc75hkpalzS95mOMcIic0J-Fc,1193
45
45
  pyjallib/max/macro/jal_macro_select.py,sha256=jeSFR_mqqudTTrZE1rU6qifJ4g441cYxXWcHPTWh1CU,2289
46
46
  pyjallib/max/ui/Container.py,sha256=QSk3oCqhfiR4aglSSkherRGAyPFqMRUt83L-0ENBz-s,5571
47
- pyjallib-0.1.15.dist-info/METADATA,sha256=syGZwRd9A7gdeiOYxG9QpXz-o7qkMZhrRsvwEaEyCYo,870
48
- pyjallib-0.1.15.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
49
- pyjallib-0.1.15.dist-info/RECORD,,
47
+ pyjallib-0.1.16.dist-info/METADATA,sha256=zPdi6nX3h5VvUBW371qgdfefTHTdBY-oB4ge8nYVzQs,870
48
+ pyjallib-0.1.16.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
49
+ pyjallib-0.1.16.dist-info/RECORD,,