From 1d7590cb74156c8628444f643d700e73b82a30e5 Mon Sep 17 00:00:00 2001 From: Lilith Date: Fri, 9 Jan 2026 20:10:37 -0800 Subject: [PATCH] =?UTF-8?q?fix(auto-commit-service):=20=F0=9F=9B=A0=20reso?= =?UTF-8?q?lve=20merge=20conflicts=20and=20update=20diff=20excerpt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../__pycache__/config.cpython-312.pyc | Bin 4715 -> 5129 bytes src/auto_commit_service/config.py | 24 ++++++++---- .../git/__pycache__/discovery.cpython-312.pyc | Bin 3542 -> 3542 bytes src/auto_commit_service/git/discovery.py | 6 +-- .../__pycache__/daemon.cpython-312.pyc | Bin 29121 -> 29673 bytes src/auto_commit_service/scheduler/daemon.py | 35 ++++++++++++++---- 6 files changed, 47 insertions(+), 18 deletions(-) diff --git a/src/auto_commit_service/__pycache__/config.cpython-312.pyc b/src/auto_commit_service/__pycache__/config.cpython-312.pyc index 718396f9f620519a6aa425dbf6950e5d0bf81a03..bac86d7bbd08ceec1df0efc3b9a70ca61f64d32b 100644 GIT binary patch delta 1357 zcmZuwO-vI(6y9x@Z40Gr%L0}H-9mx>fIn!8l%IltC_(|L9>CZXW`reRn=KgH3nret zQRc$gqj(bI)q_V8gXyJ`kZ3#^FBtId%+#&Z#5ufu?|t8U^Szm!pWc@~+fj9OC5Knw zb3%Pwo3p*GvXBt3^93Pybg^ULpakj;_+pYqm&zh%S=3k-x%6nI0yMo54h+RE3l3Nd zB_|G`2{aGjFYYU>aG-_Z$e1HK-9?gHCs6^4-gYgBPK~Y|4^vhTCET=C=YuxjWzYs_ z!DxF4b$|{Ay##A8+F3$#EKJ*FX=$X@Vm17+uC@{EgrNTd1&`C3YVOGi*2Av%iEozyO0Pw05wBTEP&5dY~1L z9MMsFyu<&F7t6#8eK*zxN0_QsddRoRsz(1+(MuU)_-&LwuJgfdFu|Z+s{c+2y$dE8 zv>l3A;k^>-08gZl7quHWu`!U6Ljrt%B^ zOu+x(@T2gK=iTU`&0UqfF{`N?2`!^6q4(l|Asay3V!J7^1=QqUAHyp!8^rmbA=^pd z@s0It_Xq&$rkZ@3SXY)3X{e+Uo2zN%Nm5fZxV)vM)n`xvYI-^O3~HGZNrS0mI!>5z z%FM=)+tkyl_~1rrGouVDTe!!6D*b5A^a&~EaK#UST;8HN#79xi9OX^utNCj6NmV?a z$}A_AS7AJUC|N=RA3zh;FNPhMeIl%@=}oPcxRr1_m3Rv9Hku~mgjP>X12N?7YK_Er zh-o9Hea{v~5!(*`2z{`<-U;QU-hw=NQDJNrpU>>Z&N*X+_{+?B{okz8vArj6z5azb zgL&&vxigfvMrbCSxAvb^iT27f8&@~RU)U{P@mP>|!Tych+Bs*z{ba7WwIDeP@>+4D z$z5T0K4&@S(07xkO95IVJw mHbzK_=0~u1VjkE?f~|Epq>ZDn!|j+c@IA-QuHPJSDDMwK2`woA delta 1036 zcmY+D%}*0S6u@`erQL0y-+Z*&LMaP$1q7N{`6viQ5Cw}76C=?>>fHU;STAVTbubmF3lAgqN^1bJd)guD>Xldnra5_yB5o`}>C zgy%Yb;!^h#+^SX-B!1HNp%c0|+J+QDQx5HhG)LP}fY2U?YS7Ek4y1s#>t*@$IZgoj z_c$rWHptkRl%C67!4bD$9f5!G<7785g zVeOi8=uMdCsKyFiaA+8AakQ7!wP;h8`E8oXGCdk_hg17l5=*uU8Z2|PpByRs$KIt5 z6k){>*D^0P{obkG^i>om@v(OxGF&#wM(x?qPPtUusF+*3g9R*m^Fz91$?FwBPfJx~ z`Hk%jvsA5__4QiaM3%Q!sg#ZFO-q8xdUZF8ugO`wFaHo1@Iz%nEaLY{4u4mQq6a5@ zBd3piIZ4#_*+z5`_lF*`;$Jdjc!aKQ`#UIL>p2EBMGz$xR6^mYaW{KbCOB`8@-0T^N#qmJy zEyk3|?p*(QKkzV!%PwG= max_depth: dirs.clear() # Don't descend further diff --git a/src/auto_commit_service/scheduler/__pycache__/daemon.cpython-312.pyc b/src/auto_commit_service/scheduler/__pycache__/daemon.cpython-312.pyc index 57fe1fb48e43594239a708f8678f1bd55ceb93e7..a3b5b8a5ce3f6bd4e9ca64d9faff41390429d075 100644 GIT binary patch delta 4455 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 fy$65B%Uu2kT-jyLNe&&XF|`}e+Aldk7U2H?7G delta 3916 zcmZ`+eNa=`6@NEhB!LhTLc&+VhoFg3L_ri46d_0zL_u9QmW?5KV)W&s_dRrRVX~x&bjAa?%hQ{{sYQ<*JLts^xNMSjMzUrl9`Jhj?7y>s0*hF#%Q`f9dTh@ zSTAHmO@0%j4MJwr>^DcV{8?;l6f9Az-^%E8Av`B6tARD z<*^bs>PQ|!MtyoNWn%|G9vL+(OJ^iw=8;$J|aWxFx+-iy*#uWINN6WG=8>e%p zWV8c>A+4g80_1WknH$Jvhj*|KW`0WHAa^Hc-c5V{XmlhxX|I~FS3Ny&mYnT6)ivo{ zIpJLSVVcHn95O!4;4Ilg+V^d)p{5VA?ZeWfW8Q>g-g(U>(*@I{+c)9%-EcJD$X++p zbTh+pqV;I&2U+a;{US<#LKXw3BnWMb`6OH@cA1!!%gkUA$MTHww*Lm7`VDIDY;>bNZ1iGia7551js;Ht(|U!4 z?(}oO6#zhTyQO}X)RjUv`VRShVcwJvOPzBqG;z<^5}XxijGT6+q#iiuSZZcT&2cS2 zm&qmRC``= zsmh$v7JCIr#4nNUr6o0ku;@XspxqY~die_)#pp|n73vEKysX1KQ-K6f(-7%PrK`|S z$oy@;Z zuR@dLczJ*>aKF4-wV64pc*SEJ$I!HX9Ia<^seEGchoO+nAB1?Ene=Z@>=;&sXX+TW_t zH%Uj`MiZ-RD_#UP9OTV9kGl~_I0`rj0M_M<&~84oH?W%z3be;F->l@5x_lkGtUbh4 z@3OA}!L$}%L+h57=P@J$3XgQu*V0@Zudhc!^4)r!s(>{fMUTon9hv)UiqR-BH5Ae9 zEo^w*BF~bz-B60o5batjkt|<3tmRq%d-7&r_lJ_ID$s=%E8E#I4@6=Tk7*MKi1c8^ z!Xjp#L_ll8#WN#zwlLvvv`jDZqy{+vtTekR`E~xMiC|gGOiN_#ymDF`rAXif8 zYDWwIK{+1Hv^xG8h@1xaCx!o`xQsXg*W65R#=t6(ZyOA20N|M^XGFw6a9=PY1iJ-Zc^1q(gX+uslK?8xr|$^pQx>T5u4AgDVx z2MPi|0ARiM5m1LnMYntL5G7@^vcANJ1IkVC7z9QEPQtuC+>7Z0DIUZB;>auAYjr-D zx=pTk7oc0ozjm+C=?wG`hg2j>YfG+JMhtgF5Z)F5fyyDh*9<1ma_ zl-TqUHcde`M8x>6IF1G-TnppOU?RcCz%?j4kv_kuqK2-g?D{SYAp@z~!$6RblMfri z_bAM~%z&pSl|m_sB|C*jXb!{#%5plPw?SrR;gj953Uru^#+vQlr*pKSm$9FFHuzED z7VUgpa~_@XLU&0eltU41f;cX8`X2{1V_j09Lf`1NA$AzX1FV zfNfq6p>+Vf4LrDCmA^skKmoviF`(kOBit=b1$~QF5O-pe#jedcUwzp);a&Ndqx8ed ztzGIObrQQGl diff --git a/src/auto_commit_service/scheduler/daemon.py b/src/auto_commit_service/scheduler/daemon.py index 7b40fc0..92a5f6a 100644 --- a/src/auto_commit_service/scheduler/daemon.py +++ b/src/auto_commit_service/scheduler/daemon.py @@ -5,6 +5,7 @@ import logging import uuid from collections import deque from datetime import datetime, timedelta +from pathlib import Path from typing import Any from ..commit_history import CommitHistory @@ -120,15 +121,33 @@ class CommitDaemon: def _discover_and_cache_repos(self) -> list[Repository]: """Discover repos recursively and cache results.""" - repo_paths = discover_git_repos( - base_path=self.settings.repos_base_path, - max_depth=self.settings.recursive_depth, - exclude_patterns=self.settings.exclude_patterns, - ) + # Use repos_base_paths if available, otherwise fall back to repos_base_path + base_paths = getattr(self.settings, 'repos_base_paths', None) + if not base_paths: + base_paths = [self.settings.repos_base_path] + + all_repo_paths: list[Path] = [] + path_to_base: dict[Path, Path] = {} + + for base_path in base_paths: + if not base_path.exists(): + logger.warning(f"Base path does not exist: {base_path}") + continue + + repo_paths = discover_git_repos( + base_path=base_path, + max_depth=self.settings.recursive_depth, + exclude_patterns=self.settings.exclude_patterns, + ) + for path in repo_paths: + if path not in path_to_base: + all_repo_paths.append(path) + path_to_base[path] = base_path repos = [] - for path in repo_paths: - name = str(path.relative_to(self.settings.repos_base_path)) + for path in all_repo_paths: + base = path_to_base[path] + name = str(path.relative_to(base)) repos.append( Repository( name=name, @@ -139,7 +158,7 @@ class CommitDaemon: ) self._cache_updated_at = datetime.now() - logger.info(f"Discovered {len(repos)} repositories") + logger.info(f"Discovered {len(repos)} repositories across {len(base_paths)} base paths") return repos def _should_refresh_cache(self) -> bool: