@@ -72,133 +72,120 @@ enum class output_format
72
72
SHORT = 2
73
73
};
74
74
75
- // void print_entries(git_status_t status, status_list_wrapper& sl, bool head_selector, output_format of,
76
- // std::set<std::string>* tracked_dir_set = nullptr)
77
- // {
78
- // const auto& entry_list = sl.get_entry_list(status);
79
- // if (!entry_list.empty())
80
- // {
81
- // for (auto* entry : entry_list)
82
- // {
83
- // if ((of == output_format::DEFAULT) || (of == output_format::LONG))
84
- // {
85
- // std::cout << status_msg_map.at(status).long_mod << "\t";
86
- // }
87
- // else if (of == output_format::SHORT)
88
- // {
89
- // std::cout << status_msg_map.at(status).short_mod;
90
- // }
75
+ struct print_entry
76
+ {
77
+ std::string status;
78
+ std::string item;
79
+ };
80
+
81
+ std::string get_print_status (git_status_t status, output_format of)
82
+ {
83
+ std::string entry_status;
84
+ if ((of == output_format::DEFAULT) || (of == output_format::LONG))
85
+ {
86
+ entry_status = status_msg_map.at (status).long_mod + " \t " ;
87
+ }
88
+ else if (of == output_format::SHORT)
89
+ {
90
+ entry_status = status_msg_map.at (status).short_mod ;
91
+ }
92
+ return entry_status;
93
+ }
94
+
95
+ void update_tracked_dir_set (const char * old_path, const char * new_path, std::set<std::string>* tracked_dir_set = nullptr )
96
+ {
97
+ if (tracked_dir_set)
98
+ {
99
+ const size_t first_slash_idx = std::string_view (old_path).find (' /' );
100
+ if (std::string::npos != first_slash_idx)
101
+ {
102
+ auto directory = std::string_view (old_path).substr (0 , first_slash_idx);
103
+ tracked_dir_set->insert (std::string (directory));
104
+ }
105
+ }
106
+ }
107
+
108
+ std::string get_print_item (const char * old_path, const char * new_path)
109
+ {
110
+ std::string entry_item;
111
+ if (old_path && new_path && std::strcmp (old_path, new_path))
112
+ {
113
+ entry_item = std::string (old_path) + " -> " + std::string (new_path);
114
+ }
115
+ else
116
+ {
117
+ if (old_path)
118
+ {
119
+ entry_item = old_path;
120
+ }
121
+ else
122
+ {
123
+ entry_item = new_path;
124
+ }
125
+ }
126
+ return entry_item;
127
+ }
91
128
92
- // git_diff_delta* diff_delta;
93
- // if (head_selector)
94
- // {
95
- // diff_delta = entry->head_to_index;
96
- // }
97
- // else
98
- // {
99
- // diff_delta = entry->index_to_workdir;
100
- // }
101
- // const char* old_path = diff_delta->old_file.path;
102
- // const char* new_path = diff_delta->new_file.path;
103
- // if (tracked_dir_set)
104
- // {
105
- // const size_t first_slash_idx = std::string_view(old_path).find('/');
106
- // if (std::string::npos != first_slash_idx)
107
- // {
108
- // auto directory = std::string_view(old_path).substr(0, first_slash_idx);
109
- // tracked_dir_set->insert(std::string(directory));
110
- // }
111
- // }
112
- // if (old_path && new_path && std::strcmp(old_path, new_path))
113
- // {
114
- // std::cout << old_path << " -> " << new_path << std::endl;
115
- // }
116
- // else
117
- // {
118
- // if (old_path)
119
- // {
120
- // std::cout << old_path << std::endl;
121
- // }
122
- // else
123
- // {
124
- // std::cout << new_path << std::endl;
125
- // }
126
- // }
127
- // }
128
- // }
129
- // else
130
- // {}
131
- // }
132
- //
133
- std::vector<std::pair<std::string, std::string>> get_entries_to_print (git_status_t status, status_list_wrapper& sl,
129
+ std::vector<print_entry> get_entries_to_print (git_status_t status, status_list_wrapper& sl,
134
130
bool head_selector, output_format of, std::set<std::string>* tracked_dir_set = nullptr )
135
131
{
136
- std::vector<std::pair<std::string, std::string> > entries_to_print{};
132
+ std::vector<print_entry > entries_to_print{};
137
133
const auto & entry_list = sl.get_entry_list (status);
138
- if (! entry_list.empty ())
134
+ if (entry_list.empty ())
139
135
{
140
- for (auto * entry : entry_list)
141
- {
142
- std::string bla;
143
- if ((of == output_format::DEFAULT) || (of == output_format::LONG))
144
- {
145
- bla = status_msg_map.at (status).long_mod + " \t " ;
146
- }
147
- else if (of == output_format::SHORT)
148
- {
149
- bla = status_msg_map.at (status).short_mod ;
150
- }
136
+ return entries_to_print;
137
+ }
151
138
152
- git_diff_delta* diff_delta;
153
- if (head_selector)
154
- {
155
- diff_delta = entry->head_to_index ;
156
- }
157
- else
158
- {
159
- diff_delta = entry->index_to_workdir ;
160
- }
161
- const char * old_path = diff_delta->old_file .path ;
162
- const char * new_path = diff_delta->new_file .path ;
163
- std::string blou;
164
- if (tracked_dir_set)
165
- {
166
- const size_t first_slash_idx = std::string_view (old_path).find (' /' );
167
- if (std::string::npos != first_slash_idx)
168
- {
169
- auto directory = std::string_view (old_path).substr (0 , first_slash_idx);
170
- tracked_dir_set->insert (std::string (directory));
171
- }
172
- }
173
- if (old_path && new_path && std::strcmp (old_path, new_path))
139
+ for (auto * entry : entry_list)
140
+ {
141
+ git_diff_delta* diff_delta = head_selector ? entry->head_to_index : entry->index_to_workdir ;
142
+ const char * old_path = diff_delta->old_file .path ;
143
+ const char * new_path = diff_delta->new_file .path ;
144
+
145
+ update_tracked_dir_set (old_path, new_path, tracked_dir_set);
146
+
147
+ print_entry e = { get_print_status (status, of), get_print_item (old_path, new_path)};
148
+
149
+ entries_to_print.push_back (std::move (e));
150
+ }
151
+ return entries_to_print;
152
+ }
153
+
154
+ void print_entries (std::vector<print_entry> entries_to_print)
155
+ {
156
+ for (auto e: entries_to_print)
157
+ {
158
+ std::cout << e.status << e.item << std::endl;
159
+ }
160
+ }
161
+
162
+ void print_not_tracked (std::vector<print_entry> entries_to_print, std::set<std::string>* tracked_dir_set,
163
+ std::set<std::string>* untracked_dir_set)
164
+ {
165
+ std::vector<print_entry> not_tracked_entries_to_print{};
166
+ for (auto e: entries_to_print)
167
+ {
168
+ const size_t first_slash_idx = std::string_view (e.item ).find (' /' );
169
+ if (std::string::npos != first_slash_idx)
170
+ {
171
+ auto directory = e.item .substr (0 , first_slash_idx);
172
+ if (tracked_dir_set->contains (directory))
174
173
{
175
- blou = std::string (old_path) + " -> " + std::string (new_path );
174
+ not_tracked_entries_to_print. push_back (e );
176
175
}
177
176
else
178
177
{
179
- if (old_path)
180
- {
181
- blou = old_path;
182
- }
178
+ if (untracked_dir_set->contains (directory))
179
+ {}
183
180
else
184
181
{
185
- blou = new_path;
182
+ not_tracked_entries_to_print.push_back ({e.status , directory});
183
+ untracked_dir_set->insert (std::string (directory));
186
184
}
187
185
}
188
- entries_to_print.push_back ({bla, blou});
189
186
}
190
187
}
191
- else
192
- {}
193
- return entries_to_print;
194
- }
195
-
196
- void print_entries (std::vector<std::pair<std::string, std::string>> entries_to_print)
197
- {
198
- for (auto e: entries_to_print)
199
- {
200
- std::cout << e.first << e.second << std::endl;
201
- }
188
+ print_entries (not_tracked_entries_to_print);
202
189
}
203
190
204
191
void status_subcommand::run ()
@@ -257,6 +244,11 @@ void status_subcommand::run()
257
244
std::cout << std::endl;
258
245
}
259
246
}
247
+ // std::cout << "to be commited: " << tracked_dir_set->size() << std::endl;
248
+ // for (auto t : tracked_dir_set*)
249
+ // {
250
+ // std::cout << t << std::endl;
251
+ // }
260
252
261
253
if (sl.has_notstagged_header ())
262
254
{
@@ -273,37 +265,16 @@ void status_subcommand::run()
273
265
std::cout << std::endl;
274
266
}
275
267
}
268
+ // std::cout << "not stagged: " << tracked_dir_set->size() << std::endl;
276
269
277
270
if (sl.has_untracked_header ())
278
271
{
279
272
if (is_long)
280
273
{
281
274
std::cout << untracked_header << std::endl;
282
275
}
283
- std::vector<std::pair<std::string, std::string>> untracked_untries_to_print{};
284
- for (auto e: get_entries_to_print (GIT_STATUS_WT_NEW, sl, false , of))
285
- {
286
- const size_t first_slash_idx = std::string_view (e.second ).find (' /' );
287
- if (std::string::npos != first_slash_idx)
288
- {
289
- auto directory = std::string_view (e.second ).substr (0 , first_slash_idx);
290
- if (auto directory in tracked_dir_set)
291
- {
292
-
293
- }
294
- else
295
- {
296
- if (auto directory in untracked_dir_set)
297
- {}
298
- else
299
- {
300
- untracked_untries_to_print.push_back ({e.first , directory});
301
- untracked_dir_set->insert (std::string (directory));
302
- }
303
- }
304
- }
305
- }
306
- print_entries (untracked_untries_to_print);
276
+ // print_entries(get_entries_to_print(GIT_STATUS_WT_NEW, sl, false, of));
277
+ print_not_tracked (get_entries_to_print (GIT_STATUS_WT_NEW, sl, false , of), tracked_dir_set, untracked_dir_set);
307
278
if (is_long)
308
279
{
309
280
std::cout << std::endl;
@@ -316,7 +287,8 @@ void status_subcommand::run()
316
287
{
317
288
std::cout << ignored_header << std::endl;
318
289
}
319
- print_entries (get_entries_to_print (GIT_STATUS_IGNORED, sl, false , of)); // TODO: same as untracked
290
+ // print_entries(get_entries_to_print(GIT_STATUS_IGNORED, sl, false, of));
291
+ print_not_tracked (get_entries_to_print (GIT_STATUS_IGNORED, sl, false , of), tracked_dir_set, untracked_dir_set);
320
292
if (is_long)
321
293
{
322
294
std::cout << std::endl;
0 commit comments