@@ -4,7 +4,7 @@ import ReleasePreparation from '../../lib/prepare_release.js';
44import ReleasePromotion from '../../lib/promote_release.js' ;
55import TeamInfo from '../../lib/team_info.js' ;
66import Request from '../../lib/request.js' ;
7- import { runPromise } from '../../lib/run.js' ;
7+ import { forceRunAsync , runPromise } from '../../lib/run.js' ;
88
99export const command = 'release [prid..]' ;
1010export const describe = 'Manage an in-progress release or start a new one.' ;
@@ -114,14 +114,31 @@ function release(state, argv) {
114114 cli . setAssumeYes ( ) ;
115115 }
116116
117- return runPromise ( main ( state , argv , cli , dir ) ) . catch ( ( err ) => {
117+ return runPromise ( wrapStash ( ( ) => main ( state , argv , cli , dir ) ) ) . catch ( ( err ) => {
118118 if ( cli . spinner . enabled ) {
119119 cli . spinner . fail ( ) ;
120120 }
121121 throw err ;
122122 } ) ;
123123}
124124
125+ async function wrapStash ( fn ) {
126+ let stashed = false ;
127+ try {
128+ await forceRunAsync ( 'git' , [ '--no-pager' , 'diff' , '--exit-code' ] , { ignoreFailure : false } ) ;
129+ } catch {
130+ await forceRunAsync ( 'git' , [ 'stash' , '--include-untracked' ] , { ignoreFailure : false } ) ;
131+ stashed = true ;
132+ }
133+ try {
134+ await fn ( ) ;
135+ } finally {
136+ if ( stashed ) {
137+ await forceRunAsync ( 'git' , [ 'stash' , 'pop' ] , { ignoreFailure : false } ) ;
138+ }
139+ }
140+ }
141+
125142async function main ( state , argv , cli , dir ) {
126143 if ( state === PREPARE ) {
127144 const release = new ReleasePreparation ( argv , cli , dir ) ;
0 commit comments